对于 R 中的大型必要循环,“while 循环”是不是应该优于“for 循环”?
Posted
技术标签:
【中文标题】对于 R 中的大型必要循环,“while 循环”是不是应该优于“for 循环”?【英文标题】:Should "while loops" be preferred to "for loops" for large, necessary loops in R?对于 R 中的大型必要循环,“while 循环”是否应该优于“for 循环”? 【发布时间】:2010-11-17 08:36:06 【问题描述】:意识到循环在 R 中通常并不理想,有时它们是必要的。
写大循环时,不
for (i in 1:large_number)
浪费内存,因为必须创建大小为 large_number 的向量?
这会使 while 循环成为大型必要循环的最佳选择吗?
【问题讨论】:
【参考方案1】:首先,很多“循环不好”的讨论源于黑暗时代,当时循环实际上实现效率较低,尤其是在某些版本的 S-Plus 中。
也就是说,虽然您关于需要大型索引对象的评论是正确的,但您也可以使用
apply
系列中的函数,例如 sapply
、lapply
或 tapply
,用于展开您的结构
相对较新的iterators 包也避免了您提到的作为内存限制的大向量
Ra 'accelerated R' variant and its jit package 可以显着加速简单循环。
作为额外的好处,选项 1 和 2 提供了在合适的系统上使用 CRAN 包 snow、multicore 或 NWS 中的工具并行执行循环的路径,仅举几例。
【讨论】:
Dirk,我最近阅读了 Ihaka & Lang 的一篇论文(“回到未来:Lisp 作为统计计算系统的基础)”,其中 R 循环与 Python 相比是不利的。与 CLOS 相比,它们都比较慢。我在四处询问 R 是否会成为一种功能语言。你怎么看?? 这里没有添加见解,抱歉。一方面,您拥有 R 的庞大用户群并且需要向后兼容,另一方面您希望尝试新功能。我认为变化只会是进化的,而不是革命性的。以上是关于对于 R 中的大型必要循环,“while 循环”是不是应该优于“for 循环”?的主要内容,如果未能解决你的问题,请参考以下文章
R quantstrat 代码中的 While 循环 - 如何使其更快?