R语言中parLapply无法调用自定义包函数的问题求助
解决parLapply调用自定义包函数时的参数缺失错误
错误原因
你遇到的argument "func" is missing, with no default错误,本质是集群节点执行时无法正确识别要调用的func函数。问题出在parLapply的函数参数传递方式,以及clusterExport后的函数引用逻辑不匹配。
解决方案
方案1:修改parLapply的函数引用方式
既然已经通过clusterExport将func导出到集群节点的全局环境,在parLapply中直接用字符串指定函数名即可:
library(parallel) func <- function(x) { output <- myPkg::myFunc( file = x, path = "/local/path" ) output } vector = c("file1", "file2") cluster <- makeCluster(10) clusterEvalQ(cluster, library(myPkg)) clusterExport(cluster, "func") # 用字符串"func"指定要调用的函数 parLapply(cluster, vector, fun = "func") # 记得关闭集群 stopCluster(cluster)
方案2:无需clusterExport,直接传递本地函数
由于你的func中使用了myPkg::myFunc的显式包引用,且已通过clusterEvalQ在集群节点加载了myPkg,可以直接将本地的func传递给parLapply,无需额外导出:
library(parallel) func <- function(x) { output <- myPkg::myFunc( file = x, path = "/local/path" ) output } vector = c("file1", "file2") cluster <- makeCluster(10) clusterEvalQ(cluster, library(myPkg)) # 直接传递本地func,无需clusterExport parLapply(cluster, vector, func) stopCluster(cluster)
补充说明
你关于clusterEvalQ加载包后无需导出依赖函数的判断是正确的——只要集群节点加载了myPkg,myFunc依赖的包内函数会自动被找到,不需要单独导出。
内容的提问来源于stack exchange,提问作者M Shen
相关产品推荐
相关产品推荐

