如何理解R语言apply函数的轴编号逻辑?
关于R中
apply函数轴编号逻辑的理解 先创建示例矩阵:
mymatrix <- matrix(1:9, nrow=3) mymatrix
输出:
[,1] [,2] [,3] [1,] 1 4 7 [2,] 2 5 8 [3,] 3 6 9
执行按行、按列求和操作:
apply(mymatrix, 1, sum)
结果:
[1] 12 15 18
apply(mymatrix, 2, sum)
结果:
[1] 6 15 24
不少人会直觉上觉得行是矩阵的第一维度,对轴1用sum应该得到列求和结果,但实际刚好相反,下面说清楚这个设计逻辑:
- R的矩阵是列优先存储的:数据在内存里是先存第一列的所有元素,再存第二列,以此类推,这种底层存储方式影响了维度的逻辑定义。
apply的第二个参数MARGIN(轴编号),核心是指定要保留的维度,而非要计算的维度:- 设
MARGIN=1,意思是保留行维度,对每一行的所有元素执行函数——也就是按行计算,结果长度等于行数; - 设
MARGIN=2,意思是保留列维度,对每一列的所有元素执行函数——也就是按列计算,结果长度等于列数。
- 设
- 换个通俗说法:
MARGIN=1就是“一行一行过”,把每一行的元素凑起来算;MARGIN=2就是“一列一列过”,把每一列的元素凑起来算。
不用纠结“行是不是第一维度”,直接记死规则:MARGIN=1处理行,MARGIN=2处理列,这是R基于自身存储逻辑定下的标准。
内容的提问来源于stack exchange,提问作者WestCoastProjects
相关产品推荐
相关产品推荐

