lapply 位於 base 包(package)。 說明
lapply 返回與 X 長度相同的列表,其中每個元素是將 FUN 應用於 X 的相應元素的結果。
sapply 是 lapply 的用戶友好版本和包裝器,默認情況下通過應用 simplify2array() 返回向量、矩陣,或者如果 simplify = "array" 則返回數組(如果適用)。 sapply(x, f, simplify = FALSE, USE.NAMES = FALSE) 與 lapply(x, f) 相同。
vapply 與 sapply 類似,但具有預先指定的返回值類型,因此使用起來更安全(有時更快)。
replicate 是 sapply 的常用包裝器,用於重複計算表達式(通常涉及隨機數生成)。
simplify2array() 是當 simplify 不為 false 時從 sapply() 調用的實用程序,並且類似地從 mapply() 調用。
用法
lapply(X, FUN, ...)
sapply(X, FUN, ..., simplify = TRUE, USE.NAMES = TRUE)
vapply(X, FUN, FUN.VALUE, ..., USE.NAMES = TRUE)
replicate(n, expr, simplify = "array")
simplify2array(x, higher = TRUE, except = c(0L, 1L))
參數
X |
向量(原子或列表)或 |
FUN |
應用於 |
... |
|
simplify |
邏輯或字符串;如果可能的話,結果應該簡化為向量、矩陣還是更高維的數組?對於 |
USE.NAMES |
邏輯性;如果 |
FUN.VALUE |
(廣義)向量; FUN 返回值的模板。查看具體信息'。 |
n |
整數:重複次數。 |
expr |
要重複計算的表達式(language object,通常是調用)。 |
x |
一個列表,通常從 |
higher |
邏輯性;如果為 true, |
except |
整數向量或 |
細節
FUN 通過調用 match.fun 找到,通常指定為函數或符號(例如,反引號名稱)或字符串,指定要從調用 lapply 的環境中搜索的函數。
函數 FUN 必須能夠接受 X 的任何元素作為輸入。如果後者是原子向量,則 FUN 將始終傳遞與 X 類型相同的長度為 1 的向量。
... 中的參數不能與任何其他參數同名,並且可能需要注意避免與 FUN 部分匹配。在通用代碼中,如果傳遞 ...,最好將前兩個參數命名為 X 和 FUN:這既可以避免與 FUN 部分匹配,又可以確保在參數存在時給出合理的錯誤消息名為 X 或 FUN 的傳遞通過 ... 。
僅當 X 的長度大於零並且 X 的所有元素的返回值都具有相同(正)長度時,才會嘗試 sapply 中的簡化。如果公共長度為 1,則結果是一個向量,如果大於 1,則結果是一個矩陣,其中的列對應於 X 的每個元素。
簡化始終在 vapply 中完成。此函數檢查 FUN 的所有值是否與 FUN.VALUE 兼容,因為它們必須具有相同的長度和類型。 (類型可以在邏輯 < 整數 < 雙精度 < 複雜排序中提升為更高類型,但不能降級。)
S4 類的用戶應將列表傳遞給 lapply 和 vapply :內部強製由基本命名空間中的 as.list 完成,而不是由用戶定義的(例如,通過在基本函數上設置 S4 方法) 。
值
對於 lapply 、 sapply(simplify = FALSE) 和 replicate(simplify = FALSE) ,一個列表。
對於 sapply(simplify = TRUE) 和 replicate(simplify =
TRUE) :如果 X 的長度為零或 n = 0 ,則為空列表。否則為與 X 長度相同的原子向量或矩陣或列表(對於 replicate ,長度為 n )。如果發生簡化,則在將pairlists強製為列表之後,輸出類型由層次結構中返回值的最高類型確定:NULL < raw <邏輯<整數< double
vapply 返回與 FUN.VALUE 匹配的類型的向量或數組。如果length(FUN.VALUE) == 1返回與X長度相同的向量,否則返回數組。如果 FUN.VALUE 不是 array ,則結果是具有 length(FUN.VALUE) 行和 length(X) 列的矩陣,否則是具有 dim(a) == c(dim(FUN.VALUE), length(X)) 的數組 a 。
如果已命名,則數組值的 (Dim) 名稱取自 FUN.VALUE,否則取自第一個函數調用的結果。矩陣的列名稱或更一般地數組值的最後一維的名稱或向量值的名稱從 X 設置,如 sapply 中。
注意
sapply(*, simplify = FALSE, USE.NAMES = FALSE) 等價於 lapply(*) 。
由於曆史原因, lapply 創建的調用未被評估,並且已經編寫了依賴於此的代碼(例如, bquote )。這意味著錄製的調用始終采用 FUN(X[[i]], ...) 形式,其中 i 替換為當前(整數或雙精度)索引。這通常不是問題,但如果 FUN 使用 sys.call 或 match.call 或者它是使用該調用的原始函數,則可能會出現問題。這意味著使用包裝器調用原始函數通常更安全,因此例如需要 lapply(ll, function(x)
is.numeric(x)) 來確保 is.numeric 的方法分派正確發生。
如果 expr 是函數調用,請注意有關其求值位置的假設,特別是 ... 可能引用的內容。您可以將附加命名參數傳遞給函數調用,作為 replicate 的附加命名參數:請參閱“示例”。
例子
require(stats); require(graphics)
x <- list(a = 1:10, beta = exp(-3:3), logic = c(TRUE,FALSE,FALSE,TRUE))
# compute the list mean for each list element
lapply(x, mean)
# median and quartiles for each list element
lapply(x, quantile, probs = 1:3/4)
sapply(x, quantile)
i39 <- sapply(3:9, seq) # list of vectors
sapply(i39, fivenum)
vapply(i39, fivenum,
c(Min. = 0, "1st Qu." = 0, Median = 0, "3rd Qu." = 0, Max. = 0))
## sapply(*, "array") -- artificial example
(v <- structure(10*(5:8), names = LETTERS[1:4]))
f2 <- function(x, y) outer(rep(x, length.out = 3), y)
(a2 <- sapply(v, f2, y = 2*(1:5), simplify = "array"))
a.2 <- vapply(v, f2, outer(1:3, 1:5), y = 2*(1:5))
stopifnot(dim(a2) == c(3,5,4), all.equal(a2, a.2),
identical(dimnames(a2), list(NULL,NULL,LETTERS[1:4])))
hist(replicate(100, mean(rexp(10))))
## use of replicate() with parameters:
foo <- function(x = 1, y = 2) c(x, y)
# does not work: bar <- function(n, ...) replicate(n, foo(...))
bar <- function(n, x) replicate(n, foo(x = x))
bar(5, x = 3)
參考
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
也可以看看
apply 、 tapply 、 mapply 用於將函數應用於多個參數,rapply 用於 lapply() 的遞歸版本、eapply 用於將函數應用於 environment 中的每個條目。
相關用法
- R labels 從對象中查找標簽
- R list2DF 從列表創建 DataFrame
- R levels 級別屬性
- R ls 列出對象
- R lengths 列表或向量元素的長度
- R libPaths 包的搜索路徑
- R load 重新加載保存的數據集
- R lower.tri 矩陣的下三角部分和上三角部分
- R log 對數和指數
- R locales 查詢或設置區域設置的各個方麵
- R l10n_info 本地化信息
- R length 物體的長度
- R license R 許可條款
- R list.files 列出目錄/文件夾中的文件
- R list 列表 – 通用和點對
- R library 加載/附加和列出包
- R logical 邏輯向量
- R list2env 從列表中構建或添加到環境
- R library.dynam 從包中加載 DLL
- R libcurlVersion libcurl 的報告版本
- R file.path 構造文件路徑
- R grep 模式匹配和替換
- R getwd 獲取或設置工作目錄
- R vector 向量 - 創建、強製等
- R dump R 對象的文本表示
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Apply a Function over a List or Vector。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。
