lengths
Lengths of List or Vector Elements
Description
Get the length of each element of a list
or atomic vector (is.atomic
) as an integer or numeric vector.
Usage
lengths(x, use.names = TRUE)
Arguments
x | a |
use.names | logical indicating if the result should inherit the |
Details
This function loops over x
and returns a compatible vector containing the length of each element in x
. Effectively, length(x[[i]])
is called for all i
, so any methods on length
are considered.
lengths
is generic: you can write methods to handle specific classes of objects, see InternalMethods.
Value
A non-negative integer
of length length(x)
, except when any element has a length of more than 2^31 - 1 elements, when it returns a double vector. When use.names
is true, the names are taken from the names on x
, if any.
Note
One raison d'être of lengths(x)
is its use as a more efficient version of sapply(x, length)
and similar *apply
calls to length
. This is the reason why x
may be an atomic vector, even though lengths(x)
is trivial in that case.
See Also
length
for getting the length of any R object.
Examples
require(stats) ## summarize by month l <- split(airquality$Ozone, airquality$Month) avgOz <- lapply(l, mean, na.rm=TRUE) ## merge result airquality$avgOz <- rep(unlist(avgOz, use.names=FALSE), lengths(l)) ## but this is safer and cleaner, but can be slower airquality$avgOz <- unsplit(avgOz, airquality$Month) ## should always be true, except when a length does not fit in 32 bits stopifnot(identical(lengths(l), vapply(l, length, integer(1L)))) ## empty lists are not a problem x <- list() stopifnot(identical(lengths(x), integer())) ## nor are "list-like" expressions: lengths(expression(u, v, 1+ 0:9)) ## and we should dispatch to length methods f <- c(rep(1, 3), rep(2, 6), 3) dates <- split(as.POSIXlt(Sys.time() + 1:10), f) stopifnot(identical(lengths(dates), vapply(dates, length, integer(1L))))
Copyright (©) 1999–2012 R Foundation for Statistical Computing.
Licensed under the GNU General Public License.