"R" 如何在 foreach 循环中导出多个函数或包
How to export multiple function or packages in foreach loop in "R"
我正在尝试通过在 R 中使用 doParallel
包来减少 运行 我的代码时间。
我正在调用一个函数 awareRateSIR
,该函数的主体中使用了一些额外的包。我收到一些错误,例如
could not find function "vcount" and..
我知道 vcount
是包 igraph
的一个函数,用于 awareRateSIR
) 但它不是唯一的。我怎么解决这个问题?我想我应该传递我的函数 awareRateSIR
中使用的所有包名称,但我不知道如何在 foreach
中导出多个函数或如何导出多个包名称。
这是我的代码:
tp<-foreach(i=1:iter, .inorder = FALSE, .export = "awareRateSIR",
.packages = "igraph", .packages="doParallel")%dopar%{
tp <- awareRateSIR(graphContact, graphCom,state)
return(tp)
}
如果我不传递这些包,我将得到错误状态一些功能未知如果我传递所有的包,我将得到错误:
Error in foreach(i = 1:iter, .inorder = FALSE, .export =
"awareRateSIR", : formal argument ".packages" matched by multiple
actual arguments"
提前致谢
您应该使用 c
函数传递所有需要的包,如下所示:
tp<-foreach(i=1:iter, .inorder = FALSE, .export = "awareRateSIR",
.packages = c("igraph", "doParallel"))%dopar%{
tp <- awareRateSIR(graphContact, graphCom,state)
return(tp)
}
通常情况下,使用 foreach 时不需要导出任何变量、函数或包。
对于变量和函数,它们只需要与 foreach
语句处于相同的环境中(最好是在函数中只传递您需要的内容)。
当需要其他包的功能时,您只需使用 package::function
,就像在包内一样。
例如你可以做到
library(doParallel)
registerDoParallel(cl <- makeCluster(3))
df <- iris
foreach(spec = unique(iris$Species)) %dopar% {
dplyr::filter(df, Species == !!spec)
}
stopCluster(cl)
我正在尝试通过在 R 中使用 doParallel
包来减少 运行 我的代码时间。
我正在调用一个函数 awareRateSIR
,该函数的主体中使用了一些额外的包。我收到一些错误,例如
could not find function "vcount" and..
我知道 vcount
是包 igraph
的一个函数,用于 awareRateSIR
) 但它不是唯一的。我怎么解决这个问题?我想我应该传递我的函数 awareRateSIR
中使用的所有包名称,但我不知道如何在 foreach
中导出多个函数或如何导出多个包名称。
这是我的代码:
tp<-foreach(i=1:iter, .inorder = FALSE, .export = "awareRateSIR",
.packages = "igraph", .packages="doParallel")%dopar%{
tp <- awareRateSIR(graphContact, graphCom,state)
return(tp)
}
如果我不传递这些包,我将得到错误状态一些功能未知如果我传递所有的包,我将得到错误:
Error in foreach(i = 1:iter, .inorder = FALSE, .export = "awareRateSIR", : formal argument ".packages" matched by multiple actual arguments"
提前致谢
您应该使用 c
函数传递所有需要的包,如下所示:
tp<-foreach(i=1:iter, .inorder = FALSE, .export = "awareRateSIR",
.packages = c("igraph", "doParallel"))%dopar%{
tp <- awareRateSIR(graphContact, graphCom,state)
return(tp)
}
通常情况下,使用 foreach 时不需要导出任何变量、函数或包。
对于变量和函数,它们只需要与 foreach
语句处于相同的环境中(最好是在函数中只传递您需要的内容)。
当需要其他包的功能时,您只需使用 package::function
,就像在包内一样。
例如你可以做到
library(doParallel)
registerDoParallel(cl <- makeCluster(3))
df <- iris
foreach(spec = unique(iris$Species)) %dopar% {
dplyr::filter(df, Species == !!spec)
}
stopCluster(cl)