当与应用于行上使用时,diff函数会转置矩阵

时间:2018-06-21 05:26:39

标签: r matrix apply difference

我需要找到矩阵中各列之间的差异。 https://mystat115.blogspot.com/feeds/posts/default?alt=rss 函数将使用矩阵来处理每一列的行之间的差异,但是我需要每一行的列之间的差异。我尝试在行索引上将diff()apply()一起使用,但这会返回转置结果。为什么它返回移调,而我使用不正确?

diff()

2 个答案:

答案 0 :(得分:1)

详细说明apply的“移调效果”:

根据?applyapply将函数应用于数组(例如{{1})的行向量(MARGIN = 1)或列向量(MARGIN = 2) })并返回

  

如果数组为“ n> 1”,则数组为维度“ c(n,dim(X)[MARGIN])”

其中n是函数的单独调用返回到行向量或列向量的向量的长度。

因此,在您的情况下,matrixdim(m)(即2 10矩阵)和2x10,因此返回对象的数组维是MARGIN = 1,这意味着9 2矩阵(因为9x2返回长度为diff的向量)。

这样做时,您可以看到相同的“移调效果”

n=9

答案 1 :(得分:0)

如果让您感到困惑的是格式9 2而不是2 9,那么您是对的,只需转置它即可。

因为您已经很好地计算了列之间的差异,即

for(k in 1:nrow(m)) diff(m[k,])

完全可以满足您已有的需求。一个简单的t(apply(m, 1, diff))就可以解决问题。

> t(apply(m, 1, diff))
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    2    2    2    2    2    2    2    2    2
[2,]    2    2    2    2    2    2    2    2    2

PS 您无法获得10 2 / 2 10结构,因为diff显然将返回大小为n - 1的元素。