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]) 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:12seqXtend(a,12,"interp")# dittoseqXtend(a,12,"aim")# really worsestopifnot(all.equal(seqXtend(a,12,"interp"),1:12))## for a "general" x, however, "aim" aims better than defaultx <- c(1.2,2.4,4.6,9.9)length(print(seqXtend(x,12)))# 14length(print(seqXtend(x,12,"aim")))# 12length(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" objectsDrng <- 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 equidistantn3 <-3*length(px)summary(as.numeric(diff(seqXtend(px, n3))))# wildly varyingsummary(as.numeric(diff(seqXtend(px, n3,"aim"))))# (ditto)summary(as.numeric(diff(seqXtend(px, n3,"int"))))# around 30