在循环(R)中为向量分配值

时间:2018-11-18 19:05:49

标签: r loops matrix vector

我有一个矩阵:

x1j1 = c(6,6,18,8,11,34,28,71,43,33,20)
x1j2 = c(27,23, 64,44,30,75,26,124,54,30,14)
x2j1 = c(25,28,36,35,15,44,42,54,34,29,39)
x2j2 = c(15,13,22,29,31,64,30,64,56,20,21)

x61 = cbind(x1j1,x1j2,x2j1,x2j2)

我需要找到x1j1-x2j1和x2j1-x2j2的元素的区别。

我的代码是:

dj1 = c()
dj2 = c()

for (i in 1:nrow(x61)) {
    dj1 <- x1j1[i] - x2j1[i]
    dj2 <- x1j2[i] - x2j2[i]
}

我得到的答案只是前几个元素之间的区别:

> dj1
[1] -19
> dj2
[1] -7

如何创建具有相应值差异的向量?

1 个答案:

答案 0 :(得分:2)

您实际上已经知道如何使用(尽管您的代码使用不同的变量,所以没有一致性):

x1j1 - x2j1
#  [1] -19 -22 -18 -27  -4 -10 -14  17   9   4 -19
x2j1 - x2j2
#  [1]  10  15  14   6 -16 -20  12 -10 -22   9  18

这是因为减法是R中的 vectorized 运算,这意味着它可以直接使用向量。

出于学习目的,可以将循环编写如下

dj1 <- dj2 <- numeric(nrow(x61))

for (i in 1:nrow(x61)) {
  dj1[i] <- x1j1[i] - x2j1[i]
  dj2[i] <- x1j2[i] - x2j2[i]
}

我将dj1dj2定义为具有预定长度(为了提高效率)的空向量。然后,就像使用x1j1[i]查看某个元素一样,您需要使用dj1[i]更新某个元素。