【发布时间】:2011-11-11 11:58:17
【问题描述】:
我正在运行以下代码,并且需要很长时间才能运行。我怎么知道它是否仍在工作或卡在某个地方。
noise4<-NULL;
for(i in 1:length(noise3))
{
if(is.na(noise3[i])==TRUE)
{
next;
}
else
{
noise4<-c(noise4,noise3[i]);
}
}
noise3 是一个包含 2418233 个数据点的向量。
【问题讨论】:
-
具有 200 万次迭代的 for 循环不会很好地展示 R。
-
@David Heffernan:尤其是当您增长对象而不是预分配时。 @GTyler:看起来你可以使用
noise4 <- na.omit(noise3)。 -
@GTyler large for 循环由于其解释性质而在 R 上没有良好的性能特征。我相信最近的事态发展使情况有所改善。尽管如此,如果可能,您应该始终寻找避免 for 循环的版本。
-
@GTyler 阅读这个问题和答案,了解为什么在这种情况下
for循环很慢以及如何避免它:stackoverflow.com/q/6502444/602276 -
@GTyler:R 可以很好地处理数百万个数据点。但是
for循环是使用 R 的效率最低的方法之一。大多数 R 函数自然地遍历向量。看看这篇文章:yihui.name/en/2010/10/on-the-gory-loops-in-r 它解释了 R 方法与“普通”编程有何不同。