我有一个计算时间过长的脚本,我正在尝试并行化它的执行。
该脚本基本上遍历数据框的每一行并执行一些计算,如下所示:
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/