从向量R中的每个其他值中减去向量中的每个值

时间:2018-02-11 15:43:16

标签: r function for-loop

说我有一个矩阵

    data<-matrix(seq(1,6),ncol=2,nrow=3,byrow=TRUE)
          A  B
    [1,]  1  2
    [2,]  3  4
    [3,]  5  6

从列'A'开始,我想创建一个向量,表示'A'中的每个数字与'A'中的每个其他数字之间的成对差异。实际上:

    c(1-1, 1-3, 1-5, 3-1, 3-3, 3-5, 5-1, 5-3, 5-5)

然后我需要对第二列做同样的事情,依此类推。最终,我需要将这些向量绑定到一个新的差异矩阵中。

我觉得应该可以使用apply函数,或者也许是sweep(),但我无法将它们组合在一起。

感谢您的帮助!

PS。如果答案涉及编写函数或for循环,那么请给我一个假中级解释?我是第一次学习编码,我仍然无法理解循环,我仍然在努力编写自己的函数。

1 个答案:

答案 0 :(得分:4)

如果我们需要对每列上的每个成对元素进行减法,然后使用matrix遍历apply列,请将成对的组合作为两列data.frame与{ {1}}并使用expand.grid

减去列
Reduce

或者循环遍历列

后,另一个选项是apply(data, 2, FUN = function(x) Reduce('-', expand.grid(rep(list(x), 2))))
outer