【问题标题】:How to store values in a vector inside a for loop in R如何将值存储在R中for循环内的向量中
【发布时间】:2020-01-04 13:59:14
【问题描述】:

我刚开始使用 R,但我对以下问题感到非常沮丧:我试图将在 for 循环中完成的一些计算的值存储到我之前定义的向量中。问题是如何进行索引,因为 for 循环将执行的次数来迭代代码取决于用户的输入,所以变量 i 不一定必须从 1 开始,它可以从 80 开始例如,这就是为什么它很困难。

我在其他 StackOverflow 帖子上搜索了很多,但没有找到我正在寻找的答案。这其实是我第一次问问题,因为我很固执。我曾想过创建另一个 for 循环,但不知道它是如何工作的。我确信有一个简单的解决方案,但也许我还不知道确切的功能,因为我还在学习。

my_vector <- vector(mode="numeric")

#Suppose the user's input was 80:84, which gets stored in "number",
#where "number" is just a function argument that encompasses everything,
#and on which the for loop depends therefore

for(i in number) {
    #insert the calculation here, let's say it is i+3
    result <- i+3
    my_vector[i] <- result
}

我希望 my_vector 的长度为 4(在这种情况下)并包括数字 83、84、85 和 86,但是对于 my_vector,以 i 开头的索引是 80,而不是 1,这就是问题所在。

如何根据迭代将存储在 my_vector 索引中的这 4 个结果从 1 变为 4?

非常感谢。

【问题讨论】:

  • 80:84 是五个值,即您需要一个长度为 5 的向量。
  • my_vector &lt;- vector(mode="numeric", length=length(number)) 好多了。
  • 重要提示: i in number 表示i = 80,然后是i = 81,以此类推,my_vector 的第一个82 值等于NA

标签: r loops for-loop vector indexing


【解决方案1】:

您是否有理由要使用循环/函数?您可以直接使用矢量化(并且快速)

number <- 80:84
result <- number + 3

导致

> number
[1] 83 84 85 86 87

如果出于某种原因,您真的希望在循环中处理操作,您至少应该预先分配向量。

result <- rep(0, length(number))

for(i in 1:length(number)) {
    result[i] <- number[i] + 3
}

【讨论】:

    【解决方案2】:

    您可以使用append() 将元素添加到向量的末尾:

    my_vector <- vector(mode="numeric")
    
    number <- 80:84
    
    for(i in number) {
        #insert the calculation here, let's say it is i+3
        result <- i+3
        my_vector <- append(my_vector, result)
    }
    

    注意:您不需要为此使用for 循环。由于 R 中的加法运算符是矢量化的,您可以这样做:

    my_vector <- number + 3
    

    【讨论】:

      猜你喜欢
      • 2020-07-06
      • 1970-01-01
      • 2015-11-28
      • 2022-12-04
      • 2016-08-21
      • 1970-01-01
      • 2021-11-09
      • 2018-07-27
      • 2021-01-03
      相关资源
      最近更新 更多