Replicate Elements of Vectors and Lists
rep replicates the values in
x. It is a generic
function, and the (internal) default method is described here.
rep_len are faster simplified versions for
two common cases. They are not generic.
- a vector (of any mode including a
list) or a factor or (for
Dateobject; or an S4 object containing such an object.
- further arguments to be passed to or from other methods.
For the internal default method these can include:
- an integer-valued vector giving the
(non-negative) number of times to repeat each element if of
length(x), or to repeat the whole vector if of length 1. Negative or
NAvalues are an error. A
doublevector is accepted, other inputs being coerced to an integer or double vector.
- non-negative integer. The desired length of the
output vector. Other inputs will be coerced to a double
vector and the first element taken. Ignored if
- non-negative integer. Each element of
eachtimes. Other inputs will be coerced to an integer or double vector and the first element taken. Treated as
- times, length.out
The default behaviour is as if the call was
rep(x, times = 1, length.out = NA, each = 1). Normally just one of the additional arguments is specified, but if
eachis specified with either of the other two, its replication is performed first, and then that implied by
timesconsists of a single integer, the result consists of the whole input repeated this many times. If
timesis a vector of the same length as
x(after replication by
each), the result consists of
timestimes and so on.
length.outmay be given in place of
times, in which case
xis repeated as many times as is necessary to create a vector of this length. If both are given,
length.outtakes priority and
timesis ignored. Non-integer values of
timeswill be truncated towards zero. If
timesis a computed quantity it is prudent to add a small fuzz or use
round. And analogously for
xhas length zero and
length.outis supplied and is positive, the values are filled in using the extraction rules, that is by an
NAof the appropriate class for an atomic vector (
0for raw vectors) and
NULLfor a list.
An object of the same type as
rep_len return no attributes (except the
class if returning a factor). The default method of
rep gives the result names (which will
almost always contain duplicates) if
x had names, but retains
no other attributes.
rep.int is a simple case which was provided as a
separate function partly for S compatibility and partly for speed
(especially when names can be dropped). The performance of
has been improved since, but
rep.int is still at least twice as
x has names. The name
rep.int long precedes making
rep generic. Function
rep is a primitive, but (partial) matching of argument
names is performed as for normal functions. For historical reasons
rep (only) works on
result is always
NULL even when
length.out is positive. Although it has never been documented, these functions have always
worked on expression vectors.
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
rep(1:4, 2) rep(1:4, each = 2) # not the same. rep(1:4, c(2,2,2,2)) # same as second. rep(1:4, c(2,1,2,1)) rep(1:4, each = 2, len = 4) # first 4 only. rep(1:4, each = 2, len = 10) # 8 integers plus two recycled 1's. rep(1:4, each = 2, times = 3) # length 24, 3 complete replications rep(1, 40*(1-.8)) # length 7 on most platforms rep(1, 40*(1-.8)+1e-7) # better ## replicate a list fred <- list(happy = 1:10, name = "squash") rep(fred, 5) # date-time objects x <- .leap.seconds[1:3] rep(x, 2) rep(as.POSIXlt(x), rep(2, 3)) ## named factor x <- factor(LETTERS[1:4]); names(x) <- letters[1:4] x rep(x, 2) rep(x, each = 2) rep.int(x, 2) # no names rep_len(x, 10)