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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。