【问题标题】:Assigning values to a vector in a loop (R)在循环中为向量赋值 (R)
【发布时间】:2018-11-18 19:05:48
【问题描述】:

我有一个矩阵:

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

如何创建具有不同值的向量?

【问题讨论】:

    标签: r loops matrix vector


    【解决方案1】:

    你其实已经知道怎么做了(虽然你的代码使用了不同的变量,所以没有一致性):

    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 中的 矢量化 运算,这意味着它允许直接使用矢量。

    为了学习目的,循环可以写成如下

    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] 来更新某个元素。

    【讨论】:

    • @FeyziBagirov,它回答了你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多