我想使用并行包中的 mclapply 函数来计算值并将它们分配给 3D 数组。计算很长,我需要并行化它。然后,我想将结果放入 3D 数组中。我的第一个猜测是像这样使用 <<- :
library(parallel)
array(NA, c(10,10,3)) -> result_array
base::expand.grid(1:dim(result_array)[1], 1:dim(result_array)[2]) -> grid_df
mclapply(1:nrow(grid_df), mc.cores = 5, function(i){
grid_df$Var1[i] -> x_position
grid_df$Var2[i] -> y_position
#do calculation
1:3 -> calculation_result
result_array[x_position, y_position,] <<- calculation_result
}
这不起作用:),因为单个工作人员无法再访问 result_array 的主副本。我知道可以将结果放入数据框中,然后再创建一个数组。但是,我有很多行,实际上没有数组结构,它达到了数据帧可以拥有的最大行数。我查看了一些可以从并行工作者中访问的数据结构,并从 bigmemory 包中找到了 big.matrix。但是,这些只是 2D 矩阵,而不是 3D 数组。3D 数组有类似的东西吗?或任何其他建议如何解决我的困境?
非常感谢!