请教R语言中apply函数以c(1,3)为第二个参数的作用机制
理解R中
apply(result, c(1,3), which.max)的运行机制 先明确你的数组结构:result是一个三维数组,维度为c(5,2,3),对应:
- 维度1:5行
- 维度2:2列
- 维度3:3层(可以理解为3个独立的5×2矩阵)
apply的核心逻辑:按指定维度分组处理
apply函数的第二个参数MARGIN,用来指定要保留的维度——剩下的维度会被压缩成一个向量,然后对每个这样的向量执行第三个参数的函数(这里是which.max)。
当你传入c(1,3)作为MARGIN时,意味着:
- 固定「维度1(行)」和「维度3(层)」的每一组组合(比如第1行+第1层、第1行+第2层……第5行+第3层,一共5×3=15组)
- 对每一组,把对应的「维度2(列)」的所有元素提取出来,形成一个长度为2的向量(因为维度2的长度是2)
- 对这个向量执行
which.max,返回该向量中最大值所在的位置(只能是1或2,因为向量长度是2)
输出结果的结构
最终的输出是一个5行×3列的矩阵:
- 行数对应原数组的维度1(5行)
- 列数对应原数组的维度3(3层)
- 每个单元格的值,就是对应「行+层」组合下,原数组中该位置所有列元素里最大值的列位置。
举个具体例子
比如取原数组中第2行、第3层的元素:result[2,,3],这是一个包含2个元素的向量。which.max(result[2,,3])会返回1或2,这个值就对应输出矩阵中第2行、第3列的位置。
对应你的代码逻辑
你的代码里,每个data向量被拼成三维数组后,相当于每个层是一个5×2的数值矩阵。apply(result,c(1,3),which.max)本质就是把3个矩阵里每行的最大值列位置,按层的顺序拼成一个新的5×3矩阵。
内容的提问来源于stack exchange,提问作者fiodeno
相关产品推荐
相关产品推荐

