当我尝试恢复已经由R中的parLapply算法执行的数据帧时,我遇到了问题。
我使用虹膜数据集附加了下一个示例以显示问题。 我创建了一个函数,它为每个虹膜物种做一个线性模型,然后在它们上面进行循环。
uniques<-unique(iris$Species)
model<-function(i){
table<-iris[iris$Species==uniques[i],]
fit<-lm(Petal.Width ~ Petal.Length + Sepal.Width + Sepal.Length, data=table)
predicted_df <- data.frame(pred = predict(fit, table), table)
assign(paste0("predicted_df_",i),predicted_df,envir = .GlobalEnv)
}
#Loop over Species
loop<- for (i in 1:3){
model(i)
}
这里,树数据库(&#34; prediction_df_1 / 2/3&#34;)正确地出现在本地环境中。
当我使用parLapply算法执行相同的操作时,我无法找到数据框的位置或如何将它们带到本地环境。没有错误显示。
library("foreach")
library("doParallel")
cl <- makeCluster(mc <- getOption("cl.cores", 4))
clusterExport(cl=cl, varlist=c("iris"))
clusterEvalQ(cl, library(DAAG))
registerDoParallel(cl) # register the cluster
system.time(
df <- parLapply(cl, 1:3,
function(i) {
tryCatch({ model(i)}, error=function(e){cat("ERROR :",conditionMessage(e), "\n")})
})
)
stopCluster(cl)
有人如何帮助我完成这项任务?谢谢!
答案 0 :(得分:0)
只需使用
model<-function(i){
table<-iris[iris$Species==uniques[i],]
fit<-lm(Petal.Width ~ Petal.Length + Sepal.Width + Sepal.Length, data=table)
data.frame(pred = predict(fit, table), table)
}
然后,您将从parLapply
获得一个包含所需预测的大小为3的列表。
当您使用并行性时,无法分配到全局环境,因为这不是执行此工作的主要R会话。