apply
位於 base
包(package)。 說明
返回通過將函數應用於數組或矩陣的邊距而獲得的向量或數組或值列表。
用法
apply(X, MARGIN, FUN, ..., simplify = TRUE)
參數
X |
一個數組,包括一個矩陣。 |
MARGIN |
給出函數將應用到的下標的向量。例如,對於矩陣 |
FUN |
要應用的函數:請參閱“詳細信息”。對於 |
... |
|
simplify |
指示是否應在可能的情況下簡化結果的邏輯。 |
細節
如果 X
不是數組,而是具有非空 dim
值的類的對象(例如 DataFrame ),則 apply
嘗試通過 as.matrix
將其強製為數組(如果它是兩個)維度(例如 DataFrame )或通過 as.array
。
FUN
通過調用 match.fun
找到,通常是函數或符號(例如反引號名稱)或字符串,指定要從調用 apply
的環境中搜索的函數。
...
中的參數不能與任何其他參數同名,並且可能需要注意避免與 MARGIN
或 FUN
部分匹配。在通用代碼中,如果傳遞 ...
,最好命名前三個參數:這既可以避免與 MARGIN
或 FUN
部分匹配,又可以確保在參數命名時給出合理的錯誤消息X
、 MARGIN
或 FUN
通過 ...
傳遞。
值
如果每次調用 FUN
返回長度為 n
的向量,並且 simplify
為 TRUE
,則 apply
如果 n > 1
則返回維度為 c(n, dim(X)[MARGIN])
的數組。如果 n
等於 1
,如果 MARGIN
的長度為 1,則 apply
返回一個向量,否則返回一個維度為 dim(X)[MARGIN]
的數組。如果 n
是 0
,結果的長度為 0,但不一定是 ‘correct’ 維度。
如果對 FUN
的調用返回不同長度的向量,或者如果 simplify
是 FALSE
,則 apply
返回長度為 prod(dim(X)[MARGIN])
的列表,其中 dim
設置為 MARGIN
(如果長度大於 1) 。
在所有情況下,在設置維度之前,as.vector
將結果強製為基本向量類型之一,以便(例如)因子結果將被強製為字符數組。
例子
## Compute row and column sums for a matrix:
x <- cbind(x1 = 3, x2 = c(4:1, 2:5))
dimnames(x)[[1]] <- letters[1:8]
apply(x, 2, mean, trim = .2)
col.sums <- apply(x, 2, sum)
row.sums <- apply(x, 1, sum)
rbind(cbind(x, Rtot = row.sums), Ctot = c(col.sums, sum(col.sums)))
stopifnot( apply(x, 2, is.vector))
## Sort the columns of a matrix
apply(x, 2, sort)
## keeping named dimnames
names(dimnames(x)) <- c("row", "col")
x3 <- array(x, dim = c(dim(x),3),
dimnames = c(dimnames(x), list(C = paste0("cop.",1:3))))
identical(x, apply( x, 2, identity))
identical(x3, apply(x3, 2:3, identity))
##- function with extra args:
cave <- function(x, c1, c2) c(mean(x[c1]), mean(x[c2]))
apply(x, 1, cave, c1 = "x1", c2 = c("x1","x2"))
ma <- matrix(c(1:4, 1, 6:8), nrow = 2)
ma
apply(ma, 1, table) #--> a list of length 2
apply(ma, 1, stats::quantile) # 5 x n matrix with rownames
stopifnot(dim(ma) == dim(apply(ma, 1:2, sum)))
## Example with different lengths for each call
z <- array(1:24, dim = 2:4)
zseq <- apply(z, 1:2, function(x) seq_len(max(x)))
zseq ## a 2 x 3 matrix
typeof(zseq) ## list
dim(zseq) ## 2 3
zseq[1,]
apply(z, 3, function(x) seq_len(max(x)))
# a list without a dim attribute
參考
Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) The New S Language. Wadsworth & Brooks/Cole.
也可以看看
lapply
還有simplify2array
; tapply
,以及便利函數 sweep
和 aggregate
。
相關用法
- R append 向量合並
- R aperm 數組轉置
- R as.Date 日期與字符之間的轉換函數
- R agrep 近似字符串匹配(模糊匹配)
- R assignOps 賦值運算符
- R as.POSIX* 日期時間轉換函數
- R asplit 按邊距分割數組/矩陣
- R attributes 對象屬性列表
- R abbreviate 縮寫字符串
- R all.equal 測試兩個對象是否(幾乎)相等
- R args 函數的參數列表
- R attr 對象屬性
- R array2DF 將數組轉換為 DataFrame
- R autoload 按需加載包
- R attach 將一組 R 對象附加到搜索路徑
- R all.names 查找表達式中的所有名稱
- R as.environment 強製環境對象
- R as.function 將對象轉換為函數
- R assign 為名稱分配值
- R any 有些值是真的嗎?
- R array 多路陣列
- R as.data.frame 強製數據幀
- R all 所有的值都是真的嗎?
- R file.path 構造文件路徑
- R grep 模式匹配和替換
注:本文由純淨天空篩選整理自R-devel大神的英文原創作品 Apply Functions Over Array Margins。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。