微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在并行R中填充一个非常大的数组

如何解决如何在并行R中填充一个非常大的数组

我需要通过打开数千个 csv 文件提取数据列并将它们插入 3D 和 4D 矩阵来填充大量非常大的数组。我试过并行写这个,但总是发生的是当我的内存填满时我的计算机崩溃。我看过这个问题,Python code,但我没有得到这些建议对我有用。这是我的代码(在需要的地方通用):

tmin_array_1981_2010 <- array(NA,c(585,1386,366))
foreach (f = 1:500000,.packages=c('dplyr','lubridate')) %dopar% {
    data <- read.csv(file_name[f])
    tmin_array_1981_2010[y[f],x[f],] = data$column}

我在 foreach 循环中要做的还有很多,但这足以理解我想要做什么。我已经读到我可以使用 lapply 语句来并行化这段代码,但我不会假装我理解他们正在做什么或如何做。我也尝试过使用 abind 函数,如这篇博文 Parallel `for` loop with an array as output 所示,但它的性能比我上面的简单代码要差。

acomb <- function(...) abind(...,along=3)
foreach (f=1:18,.combine='acomb',.multicombine=TRUE,'lubridate','vroom','tidyverse')) %dopar% {
    data <- read.csv(file_name[f])
    tmin_array_1981_2010[y[f],] = data$column}

任何帮助都会很棒。谢谢。

解决方法

我想花时间的部分是阅读 CSV。

所以你总是可以返回list(y[f],x[f],data$column)(甚至只是data$column)并在以后填充数组。那就不要使用 .combine

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。