【问题标题】:For loop only stores final result in RFor循环仅将最终结果存储在R中
【发布时间】:2015-11-07 01:01:58
【问题描述】:

我正在尝试在 R 中运行一个 for 循环,它将结果存储在一个列表中。我无法将数据存储在矩阵中,因为我的输出长度不同。例如,以下代码生成一个列表,其中除最后一部分之外的所有条目都为“NULL”。

for(i in 1:n) {
  time <- list()
  time[[i]] <- (sample(1:96, wb[i], replace=T, prob=weekday[,1]))
print(time)
}

但是,如果我这样做,结果是我想要的,但它没有存储,所以我以后不能使用它。

for(i in 1:n) {
   print(sample(1:96, wb[i], replace=T, prob=weekday[,1]))
}

任何帮助将不胜感激!

【问题讨论】:

  • 您每次循环都会重新初始化timetime &lt;- list()。将其移到循环之外。 (尽管在 R 中,像这样增长的对象会很快变得非常缓慢。)
  • 遍历你的循环。当 i 为 1 时,您将一个空列表存储到 time 中,然后将一些内容放入第一个元素中。当 i 为 2 时,您将一个空列表(注意这部分)存储到 time 中,然后在第二个位置放置一些东西。第一个位置是什么?
  • 我只是在您发布回复时想到了这一点。谢谢!!

标签: r loops for-loop store


【解决方案1】:

为了增加乐趣(和效率),您可以尝试

time <- lapply(1:n, function(i) sample(1:96, wb[i], replace=T, prob=weekday[,1]))

【讨论】:

  • 谢谢,这样效率更高:)
  • @shana246 假设应用函数更有效时要小心。它们在键入代码的数量方面更有效,但它们不一定比编写良好的循环更有效,因为所有应用函数都是循环的包装器。我说它们不一定更高效,因为它们确实进行了一些简单的数据转换,从而使循环中发生的任何事情变得更高效,如果执行显式循环,可能会被忽略。例如 apply 会将数据框转换为更快迭代的矩阵。
  • @shana246 话虽如此,应用函数是循环遍历简化函数的首选方式。我唯一的观点是,当应用函数只是循环的包装器时,似乎存在一些误解,即应用函数比显式 for 循环更快
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
  • 2012-06-14
  • 2021-01-03
  • 1970-01-01
  • 2014-09-21
  • 2020-07-24
  • 1970-01-01
相关资源
最近更新 更多