如何在并行 R 中填充一个非常大的数组
How to fill a very large array in parallel R
我需要通过打开数千个 csv 文件、提取数据列并将它们插入 3D 和 4D 矩阵来填充大量非常大的数组。我试过并行写这个,但总是发生的是当我的内存填满时我的电脑崩溃了。我看过这个问题,Parallel `for` loop with an array as output,但我没有得到那些对我有用的建议。这是我的代码(在需要的地方进行了概括):
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 语句来并行化这段代码,但我不会假装我理解他们在做什么或如何做。我也尝试过使用 post、Parallel `for` loop with an array as output 中所示的 abind 函数,但这比我上面的简单代码表现更差。
acomb <- function(...) abind(..., along=3)
foreach (f=1:18, .combine='acomb', .multicombine=TRUE, .packages=c('dplyr','lubridate','vroom','tidyverse')) %dopar% {
data <- read.csv(file_name[f])
tmin_array_1981_2010[y[f],x[f],] = data$column}
任何帮助都会很棒。谢谢。
我想花时间的部分是阅读 CSV。
因此您始终可以 return list(y[f], x[f], data$column)
(甚至只是 data$column
)并稍后填充数组。那就不要用.combine
。
我需要通过打开数千个 csv 文件、提取数据列并将它们插入 3D 和 4D 矩阵来填充大量非常大的数组。我试过并行写这个,但总是发生的是当我的内存填满时我的电脑崩溃了。我看过这个问题,Parallel `for` loop with an array as output,但我没有得到那些对我有用的建议。这是我的代码(在需要的地方进行了概括):
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 语句来并行化这段代码,但我不会假装我理解他们在做什么或如何做。我也尝试过使用 post、Parallel `for` loop with an array as output 中所示的 abind 函数,但这比我上面的简单代码表现更差。
acomb <- function(...) abind(..., along=3)
foreach (f=1:18, .combine='acomb', .multicombine=TRUE, .packages=c('dplyr','lubridate','vroom','tidyverse')) %dopar% {
data <- read.csv(file_name[f])
tmin_array_1981_2010[y[f],x[f],] = data$column}
任何帮助都会很棒。谢谢。
我想花时间的部分是阅读 CSV。
因此您始终可以 return list(y[f], x[f], data$column)
(甚至只是 data$column
)并稍后填充数组。那就不要用.combine
。