当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


R rapply 递归地将函数应用于列表


R语言 rapply 位于 base 包(package)。

说明

rapplylapply 的递归版本,在结果结构方掩码有灵活性 (how = ".." )。

用法

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

参数

object

listexpression ,即 “list-like”。

f

一个 “principal” 参数的 function ,通过 ... 传递更多参数。

classes

class 名称或 "ANY" 的字符向量以匹配任何类。

deflt

默认结果(如果 how = "replace" 则不使用)。

how

字符串部分匹配给定的三种可能性:请参阅“详细信息”。

...

传递给 f 调用的附加参数。

细节

该函数有两种基本模式。如果是 how = "replace" ,则 object 本身不是 list-like 且具有 classes 中包含的类的每个元素都将替换为将 f 应用于该元素的结果。

否则,使用 how = "list"how = "unlist" 模式,概念上 object 被复制,所有具有 classes 中包含的类的非列表元素将被替换为将 f 应用于该元素的结果,所有其他元素将被替换替换为 deflt 。最后,如果 how = "unlist" ,则对结果调用 unlist(recursive = TRUE)

语义与 lapply 有详细的不同:特别是在调用 C 代码之前对参数进行求值。

R3.5.x 及更早版本,object被要求是一个列表,这是不是其 list-like 组件的情况就是如此。

如果 how = "unlist" 是一个向量,否则 “list-like” 的结构与 object 类似。

例子

X <- list(list(a = pi, b = list(c = 1L)), d = "a test")
# the "identity operation":
rapply(X, function(x) x, how = "replace") -> X.; stopifnot(identical(X, X.))
rapply(X, sqrt, classes = "numeric", how = "replace")
rapply(X, deparse, control = "all") # passing extras. argument of deparse()
rapply(X, nchar, classes = "character", deflt = NA_integer_, how = "list")
rapply(X, nchar, classes = "character", deflt = NA_integer_, how = "unlist")
rapply(X, nchar, classes = "character",                      how = "unlist")
rapply(X, log, classes = "numeric", how = "replace", base = 2)

## with expression() / list():
E  <- expression(list(a = pi, b = expression(c = C1 * C2)), d = "a test")
LE <- list(expression(a = pi, b = expression(c = C1 * C2)), d = "a test")
rapply(E, nchar, how="replace") # "expression(c = C1 * C2)" are 23 chars
rapply(E, nchar, classes = "character", deflt = NA_integer_, how = "unlist")
rapply(LE, as.character) # a "pi" | b1 "expression" | b2 "C1 * C2" ..
rapply(LE, nchar)        # (see above)
stopifnot(exprs = {
  identical(E , rapply(E , identity, how = "replace"))
  identical(LE, rapply(LE, identity, how = "replace"))
})

参考

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

也可以看看

lapplydendrapply

相关用法


注:本文由纯净天空筛选整理自R-devel大神的英文原创作品 Recursively Apply a Function to a List。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。