【发布时间】:2017-10-02 19:45:10
【问题描述】:
我有以下 R “应用”语句:
for(i in 1:NROW(dataframe_stuff_that_needs_lookup_from_simulation))
{
matrix_of_sums[,i]<-
apply(simulation_results[,colnames(simulation_results) %in%
dataframe_stuff_that_needs_lookup_from_simulation[i,]],1,sum)
}
所以,我有以下数据结构:
simulation_results:具有列名的矩阵,用于标识 2000 次模拟(行)的每个可能的所需模拟查找数据。
dataframe_stuff_that_needs_lookup_from_simulation:除其他项目外,还包含其值与 Simulation_results 数据结构中的列名匹配的字段。
matrix_of_sums: 函数运行时,一个 2000 行 x 250,000 列(模拟数量 x 正在模拟的项目)结构用于保存模拟结果。
因此,apply 函数在 250,000 个数据集中查找每一行的数据帧列值,计算总和,并将其存储在 matrix_of_sums 数据结构中。
很遗憾,此处理需要很长时间。我已经探索了使用 rowsums 作为替代方案,它已将处理时间缩短了一半,但我想尝试多核处理,看看是否可以进一步缩短处理时间。有人可以帮我将上面的代码从“apply”转换为“lapply”吗?
谢谢!
【问题讨论】:
-
从
apply到lapply不会有太大的不同。但看起来你只是在做一个行求和,所以看看rowSums()。如果您想尝试并行计算,请尝试查看 foreach 包。 -
为什么不与 rowsums 分享您的解决方案?
-
@MrFlick 嘿,感谢您的回复。实际上,我正在尝试转换为 lapply 以便我可以使用 mclapply 函数,该函数处理多个内核。
-
@Moody_Mudskipper rowsums 版本如下所示:matrix_of_sums[, i]
标签: r parallel-processing lapply