【问题标题】:How to fill up a list using a for loop in R?如何使用 R 中的 for 循环填充列表?
【发布时间】:2021-02-14 03:03:03
【问题描述】:

我的目标是创建一个从下限 a 到上限 b 的数值列表,其中 n 个相等的增量。对于非常大的值,我必须这样做。我认为使用 for 循环可以轻松完成工作,但它不起作用,我看不出我的错误在哪里。

我使用下面的代码,它返回 NA

a <- 20
b <- 2
n <- 18
inc < (a-b)/n

l <-c(b)

for ( i in n) {
l[i+1] <- l[i] + inc
}

我期待以下结果

[2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , 17 , 18 ,19 , 20]

相反,我得到以下信息: [2 , NA , NA , ... ]

【问题讨论】:

  • 你不应该在 R 中为此使用循环。如果增量为 1,你可以简单地使用 l &lt;- seq(b,a)
  • 顺便说一下,这不是一个列表,而是一个向量。

标签: r loops for-loop


【解决方案1】:

好的,我想通了。我之前必须通过添加这段代码来使用正确的空格来启动列表。 l &lt;- numeric(n) 然后我添加第一个元素来初始化它。 l[1] &lt;- b

对不起,菜鸟的错误!

【讨论】:

  • 也使用'for(i in 1:n)'
  • 是的,请参阅1:5seq(from = 1, to = 5, by = 1)?seq。虽然 R 允许循环并且有时它们是必要的,但 R 还具有隐藏循环的矢量化。例如a = 1:5; b = 6:10; a + b 注意我使用分号是因为我不能在 cmets 中进行换行。
  • 通过向向量添加新元素来增加向量。例如v &lt;- c(1, 2)3 添加到 v 然后 v &lt;- c(v, 3) 产生 1 2 3 正如 RHertel 所指出的,最好使用 seq 函数来完成此任务。 ?seq 会向你解释。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多