【发布时间】:2011-03-08 23:22:51
【问题描述】:
早上好,
我已经在 R 中开发了几个月,我必须确保我的代码的执行时间不会太长,因为我分析的是大型数据集。
因此,我一直在尝试尽可能多地使用矢量化函数。
但是,我仍然想知道一些事情。
R 中代价高昂的不是循环本身吗? 我的意思是,当您开始在循环中修改变量时就会出现问题,例如,是否正确?
因此我在想,如果您只需要在每个元素上运行一个函数会怎么样(实际上您并不关心结果)。例如在数据库中写入数据。你应该怎么做?
1) 使用 mapply 而不将结果存储在任何地方?
2) 对向量做一个循环,只对每个元素应用 f(i)?
3) 有没有更好的功能我可能错过了?
(这当然是假设您的函数不是最佳矢量化的)。
foreach 包呢?使用它后,您是否体验过任何性能提升?
【问题讨论】:
-
我会把答案留给比我更专业的人,但根据我的实际经验,*apply 函数通常(但并非总是)会加快速度。
-
我猜是这样,因为循环是“在 C 中”完成的,而不是直接通过 R。
-
在应用程序系列中查看此 SO 帖子 - *.com/questions/2275896/…
-
@Colin:感谢您的链接,确实很有趣。
-
那篇 SO 帖子是 Colin 的一个糟糕示例,因为它几乎没有显示任何关于循环速度的内容。所有时间都花在递归函数中。唯一应该从中得到的是,如果您的功能需要很长时间,那么您使用哪个系列并不重要。 nullglob 这里的例子要好得多。
标签: r functional-programming loops