r - 使用 R 中的应用系列并行化用户定义的函数

标签 r parallel-processing lapply sapply mapply

我有一个计算时间过长的脚本,我正在尝试并行化它的执行。

该脚本基本上遍历数据框的每一行并执行一些计算,如下所示:

my.df = data.frame(id=1:9,value=11:19)

sumPrevious <- function(df,df.id){
    sum(df[df$id<=df.id,"value"])
}

for(i in 1:nrow(my.df)){
    print(sumPrevious(my.df,my.df[i,"id"]))
}

我开始学习在 R 中并行化代码,这就是为什么我首先想了解如何使用类似应用的函数(例如 sapply、lapply、mapply)来执行此操作。

我试过很多东西,但到目前为止没有任何效果:

mapply(sumPrevious,my.df,my.df$id) # Error in df$id : $ operator is invalid for atomic vectors

最佳答案

使用 R 中的 parallel 包,您可以使用 mclapply() 函数。您需要稍微调整代码以使其并行运行。

library(parallel)
my.df = data.frame(id=1:9,value=11:19)

sumPrevious <- function(i,df){df.id = df$id[i]
    sum(df[df$id<=df.id,"value"])
}

mclapply(X = 1:nrow(my.df),FUN = sumPrevious,my.df,mc.preschedule = T,mc.cores = no.of.cores)

此代码将在您机器的 no.of.cores 上并行运行 sumPrevious。

关于r - 使用 R 中的应用系列并行化用户定义的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45474481/

相关文章:

python - 我是否应该删除整个列中具有相同值的变量来构建机器学习模型?

hadoop - hadoop FIFO调度是否不能使提交的作业并行运行?

parallel-processing - Windows Azure : Parallelization of the code

r - 一个代码中的多个二项式测试

r - 在mutate_at中使用case_when

R:如何构造重复单位矩阵

r - 如何在R中的list()中滑动元素的长度?

R - 通过匹配名称将 lapply 输出与数据帧列表绑定(bind)

r - 将图像裁剪为圆形的最有效方法(在 R 中)?

matlab - 如何在 Matlab 中优化嵌入循环索引以实现并行化?