seqXtend function

Sequence Covering the Range of X, including X

Sequence Covering the Range of X, including X

Produce a sequence of unique values (sorted increasingly), containing the initial set of values x. This can be useful for setting prediction e.g. ranges in nonparametric regression.

seqXtend(x, length., method = c("simple", "aim", "interpolate"), from = NULL, to = NULL)

Arguments

  • x: numeric vector.

  • length.: integer specifying approximately the desired length() of the result.

  • method: string specifying the method to be used. The default, "simple" uses seq(*, length.out = length.) where "aim" aims a bit better towards the desired final length, and "interpolate" interpolates evenly inside

    each interval (x[i],x[i+1])(x[i], x[i+1]) in a way to make all the new intervalls of approximately the same length.

  • from, to: numbers to be passed to (the default method for) seq(), defaulting to the minimal and maximal x

    value, respectively.

Note

method = "interpolate" typically gives the best results. Calling roundfixS, it also need more computational resources than the other methods.

Returns

numeric vector of increasing values, of approximate length length.

(unless length. < length(unique(x)) in which case, the result is simply sort(unique(x))), containing the original values of x.

From, r <- seqXtend(x, *), the original values are at indices ix <- match(x,r), i.e., identical(x, r[ix]).

Author(s)

Martin Maechler

See Also

seq; plotDS can make particularly good use of seqXtend()

Examples

a <- c(1,2,10,12) seqXtend(a, 12)# --> simply 1:12 seqXtend(a, 12, "interp")# ditto seqXtend(a, 12, "aim")# really worse stopifnot(all.equal(seqXtend(a, 12, "interp"), 1:12)) ## for a "general" x, however, "aim" aims better than default x <- c(1.2, 2.4, 4.6, 9.9) length(print(seqXtend(x, 12))) # 14 length(print(seqXtend(x, 12, "aim"))) # 12 length(print(seqXtend(x, 12, "int"))) # 12 ## "interpolate" is really nice: xt <- seqXtend(x, 100, "interp") plot(xt, main="seqXtend(*, 100, \"interpol\")") points(match(x,xt), x, col = 2, pch = 20) # .... you don't even see that it's not equidistant # whereas the cheap method shows ... xt2 <- seqXtend(x, 100) plot(xt2, col="blue") points(match(x,xt2), x, col = 2, pch = 20) ## with "Date" objects Drng <- as.Date(c("2007-11-10", "2012-07-12")) (px <- pretty(Drng, n = 16)) # say, for the main labels ## say, a finer grid, for ticks -- should be almost equidistant n3 <- 3*length(px) summary(as.numeric(diff(seqXtend(px, n3)))) # wildly varying summary(as.numeric(diff(seqXtend(px, n3, "aim")))) # (ditto) summary(as.numeric(diff(seqXtend(px, n3, "int")))) # around 30
  • Maintainer: Martin Maechler
  • License: GPL (>= 2)
  • Last published: 2024-11-05