當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。