【发布时间】:2013-06-12 02:57:20
【问题描述】:
我在 R 中有以下 for 循环:
v = c(1,2,3,4)
s = create.some.complex.object()
for (i in v){
print(i)
s = some.complex.function.that.updates.s(s)
}
# s here has the right content.
不用说,这个循环在 R 中非常慢。 我试着用函数式来写它:
lapply(v, function(i){
print(i)
s = some.complex.function.that.updates.s(s)
})
# s wasn't updated.
但这不起作用,因为s 是按值传递的,而不是按引用传递的。
我只需要最后一次迭代的结果,而不是所有的中间步骤。
如何用 R 风格制定第一个循环?
穆龙
【问题讨论】:
-
尝试其他赋值运算符:
s <<- -
@Thomas 这会使他的代码更慢。为什么不直接将结果列表作为
lapply用于返回? -
lapply可能不会让你的循环更快。通常,当每次迭代没有副作用或避免必须预先分配对象时,您会使用lapply(和朋友);在这里你明确地有这样的副作用。 -
@Michele 我错过了关于速度的部分。我对 OP 真正想要的东西感到困惑:每次迭代或只是最后一次迭代的最终结果。
-
@Thomas 我也是。只是明白他需要决赛。大概
for是最好的办法
标签: r variables for-loop functional-programming