我目前正在研究一个R程序,其中有一个程序的一部分在循环中计算两个相互依赖的值。虽然我必须做100,000次迭代才需要很长时间。
所以我想用for循环代替一个apply循环或一些更有效的函数,但我不知道怎么做。有人能帮助我吗?
p <- c()
for(i in 1:n) {
if(i == 1) {
x <- b[i]
}
else {
x <- c(x, max(h[i - 1], p[i]))
}
h <- c(h, x[i] + y[i])
}
非常感谢!!
答案 0 :(得分:5)
您似乎没有完整的工作示例,但主要问题是使用x
函数构建h
和c()
向量非常慢。预分配它们会更好:
x <- numeric(n) # allocate vector of size n
h <- numeric(n)
然后通过分配到x[i]
和h[i]
填写它们。例如,以下循环:
x <- c(); for (i in 1:100000) x <- c(x,1)
在我的笔记本电脑上运行大约需要10秒钟,但此版本:
x <- numeric(100000); for (i in 1:100000) x[i] <- 1
在几乎立即跑步时做同样的事情。