我有一个矩阵:
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
如何创建具有相应值差异的向量?
答案 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]
}
我将dj1
和dj2
定义为具有预定长度(为了提高效率)的空向量。然后,就像使用x1j1[i]
查看某个元素一样,您需要使用dj1[i]
更新某个元素。