Learn R Programming

base (version 3.3)

rapply: Recursively Apply a Function to a List

Description

rapply is a recursive version of lapply.

Usage

rapply(object, f, classes = "ANY", deflt = NULL, how = c("unlist", "replace", "list"), ...)

Arguments

object
A list.
f
A function of a single argument.
classes
A character vector of class names, or "ANY" to match any class.
deflt
The default result (not used if how = "replace").
how
A character string partially matching the three possibilities given: see ‘Details’.
...
additional arguments passed to the call to f.

Value

If how = "unlist", a vector, otherwise a list of similar structure to object.

Details

This function has two basic modes. If how = "replace", each element of the list which is not itself a list and has a class included in classes is replaced by the result of applying f to the element.

If the mode is how = "list" or how = "unlist", the list is copied, all non-list elements which have a class included in classes are replaced by the result of applying f to the element and all others are replaced by deflt. Finally, if how = "unlist", unlist(recursive = TRUE) is called on the result.

The semantics differ in detail from lapply: in particular the arguments are evaluated before calling the C code.

References

Chambers, J. A. (1998) Programming with Data. Springer. (rapply is only described briefly there.)

See Also

lapply, dendrapply.

Examples

Run this code
X <- list(list(a = pi, b = list(c = 1:1)), d = "a test")
rapply(X, function(x) x, how = "replace")
rapply(X, sqrt, classes = "numeric", how = "replace")
rapply(X, nchar, classes = "character",
       deflt = as.integer(NA), how = "list")
rapply(X, nchar, classes = "character",
       deflt = as.integer(NA), how = "unlist")
rapply(X, nchar, classes = "character", how = "unlist")
rapply(X, log, classes = "numeric", how = "replace", base = 2)

Run the code above in your browser using DataLab