R语言foreach循环中使用迭代器的优势解析:含并行场景
在foreach中使用迭代器而非向量/列表的优势(性能与并行场景)
我搞不懂在foreach::foreach循环里传递迭代器而非向量或列表有啥优势,尤其是性能层面的。查阅vignettes文档可知,迭代器的优势之一是能维护自身状态信息,尤其是当前索引。《Writing Custom Iterators》vignette中提到:
迭代器可减少任一时刻所需的总内存。
以及:
迭代器在并行计算中格外有用,因为它便于将问题拆分为可并行执行的小任务。
但我想知道在并行操作的耗时方面,迭代器的主要优势是什么?在%do%和%dopar%两种模式下,我为何要优先选择在foreach中使用迭代器?
补充说明
我知道Stack Overflow并非这类宽泛问题的最佳提问平台,但我的问题本质上偏理论。在此提供我使用foreach的典型任务示例:
示例代码1:直接使用向量
library(foreach) library(doParallel) # 注册隐式集群 registerDoParallel(parallel::detectCores()-1) # 获取当前工作目录下部分文件的路径(如csv、txt等) paths <- list.files(full.name = TRUE) foreach(i = paths) %dopar% { df <- read.csv(i) # 执行可能耗时数分钟的操作 write.csv(df, newpath) } stopImplicitCluster()
示例代码2:使用迭代器
foreach(i = iter(paths)) %dopar% { df <- read.csv(i) # 执行可能耗时数分钟的操作 write.csv(df, newpath) }
这段代码与使用向量的版本有何区别?我知道问题仍偏宽泛和理论,但@MrFlick提到部分工作流无法从迭代器获益,请问我的这个示例是否属于这类工作流?
内容的提问来源于stack exchange,提问作者Elia
相关产品推荐
相关产品推荐

