rapply                 package:base                 R Documentation

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 matching the three possibilities given:
          see 'Details'.

     ...: additional arguments passed to the call to 'f'.

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.

Value:

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

References:

     Chambers, J. A. (1998) _Programming with Data_. Springer.
      ('rapply' is only described briefly there.)

See Also:

     'lapply', 'dendrapply'.

Examples:

     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)

