我正在尝试自学如何使用 Snowfall 包,当我尝试调用第二个函数的函数时遇到了以下问题(这是我最终想要实现的简化用例)。
我目前有:
library (snowfall)
f1 <- function(n) { return (n-1) }
f2 <- function(n) { return (f1(n)^2) }
# initialize cluster
sfInit (parallel=TRUE , cpus=4)
# parallel computing
result <- sfLapply(1:10, f2)
# stop cluster
sfStop ()
但我收到错误消息:
Error in checkForRemoteErrors(val) :
4 nodes produced errors; first error: could not find function "f1"
但是,如果我然后运行 lapply(1:10, f2) 我会收到以下输出:
lapply(1:10, f2)
[[1]]
[1] 0
[[2]]
[1] 1
[[3]]
[1] 4
[[4]]
[1] 9
[[5]]
[1] 16
[[6]]
[1] 25
[[7]]
[1] 36
[[8]]
[1] 49
[[9]]
[1] 64
[[10]]
[1] 81
我最终想使用降雪来实现多维最小化问题的并行搜索程序,因此肯定需要能够从主并行函数调用函数。
有人能帮忙吗?
最佳答案
您需要导出 f1
使用 sfExport
为 worker 提供功能sfInit
之间的功能和 sfLapply
:
sfExport('f1')
这是
snowfall
相当于 snow
clusterExport
功能。要导出多个变量,您可以使用多个参数或
list
争论:sfExport('f1', 'x')
sfExport(list=c('f1', 'x'))
要导出全局环境中的所有变量,请使用
sfExportAll
:sfExportAll()
关于R Snowfall - 难以实现调用其他函数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18704697/