对于 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 系列中的函数,例如 sapplylapplytapply,用于展开您的结构

相对较新的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 循环 - 如何使其更快?

在 SQL Server 中使用插入语句优化必要的 while 循环

R中的并行while循环

R中的for循环与while循环

R中的“for循环”中的“while循环”不起作用?

K&R C while 循环省略大括号