R - 在所有集群中导出一个函数(不是一个对象)
R - export a function (not an object) in all clusters
我并行使用 pblapply() 到 运行 代码。它提供了一个进度条,这很有用。我使用 clusterExport() 或 clusterEvalQ() 之类的函数将对象或库导出到集群中。但是我没有设法共享在我的环境中可用的自制功能。你能帮我解决这个问题吗?
这是一个非常基本的例子:
# home-made function
mean_by_column <- function(j){
mean(iris[,j])
}
# this will produce error: could not find function "mean_by_column"
cl <- parallel::makeCluster(2)
result_list <- pbapply::pblapply(
cl = cl,
X = 1:4,
FUN = function(j){ mean_by_column(j) }
)
# this will work
result_list <- pbapply::pblapply(
cl = cl,
X = 1:4,
FUN = function(j){ mean(iris[,j]) }
)
在pblapply FUN参数中重写整个函数时有效,但我不想使用它,因为真正的自制函数很长,我想多次应用这样的代码次,我不想每次都重写整个函数。而且,如果我以后想修改自制功能,或者做一些调试,那也不是最优的。
提前致谢。
函数也是对象。
因此您可以使用 parallel::clusterExport(cl, "mean_by_column")
导出它。
我并行使用 pblapply() 到 运行 代码。它提供了一个进度条,这很有用。我使用 clusterExport() 或 clusterEvalQ() 之类的函数将对象或库导出到集群中。但是我没有设法共享在我的环境中可用的自制功能。你能帮我解决这个问题吗?
这是一个非常基本的例子:
# home-made function
mean_by_column <- function(j){
mean(iris[,j])
}
# this will produce error: could not find function "mean_by_column"
cl <- parallel::makeCluster(2)
result_list <- pbapply::pblapply(
cl = cl,
X = 1:4,
FUN = function(j){ mean_by_column(j) }
)
# this will work
result_list <- pbapply::pblapply(
cl = cl,
X = 1:4,
FUN = function(j){ mean(iris[,j]) }
)
在pblapply FUN参数中重写整个函数时有效,但我不想使用它,因为真正的自制函数很长,我想多次应用这样的代码次,我不想每次都重写整个函数。而且,如果我以后想修改自制功能,或者做一些调试,那也不是最优的。
提前致谢。
函数也是对象。
因此您可以使用 parallel::clusterExport(cl, "mean_by_column")
导出它。