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

Jim*_*son 3 for-loop r function

说我有一个矩阵

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

从“A”列开始,我想创建一个包含“A”中每个数字与“A”中每个其他数字之间成对差异的向量。有效:

    c(1-1, 1-3, 1-5, 3-1, 3-3, 3-5, 5-1, 5-3, 5-5)
Run Code Online (Sandbox Code Playgroud)

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

我觉得这应该可以通过应用函数或sweep() 来实现,但我无法将它们组合在一起。

感谢您的帮助!

附注。如果答案涉及编写函数或 for 循环,您能否给我一个虚拟的中等级别的解释?我是第一次学习编码,但我仍然无法理解 for 循环,我仍然在为编写自己的函数的逻辑而苦苦挣扎。

akr*_*run 5

如果我们需要对每列上的每个成对元素进行减法,然后遍历matrixwith的列,apply将成对组合作为两列数据框 withexpand.grid并使用减去列Reduce

apply(data, 2, FUN = function(x) Reduce('-', expand.grid(rep(list(x), 2))))
Run Code Online (Sandbox Code Playgroud)

或者另一种选择是outer在循环列之后

apply(data, 2, FUN = function(x) outer(x, x, FUN = '-'))
Run Code Online (Sandbox Code Playgroud)