R Snowfall-实现调用其他函数的函数时遇到的困难

R Snowfall-实现调用其他函数的函数时遇到的困难,r,parallel-processing,snowfall,R,Parallel Processing,Snowfall,我试图教自己如何使用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 &l

我试图教自己如何使用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 ()
但是,如果我运行lappy(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
我最终想使用snowfall来实现多维最小化问题的并行搜索过程,因此肯定需要能够从主并行函数调用函数


有人能帮忙吗?

我不知道snowfall软件包的具体内容,但我知道在R中进行并行计算时,需要假设传递信息的每个核心都是一个全新的R实例。这意味着,无论在注册集群之前通过主机的是什么,克隆上只有R的普通实例


似乎有一个调用sfExportAll(),它将把所有全局变量放到克隆实例上。我想试试,但我不能在我的Windows机器上运行snowfall。

您需要使用
sfExport
函数将
f1
函数导出给工人,该函数介于
sfInit
sflappy
之间:

sfExport('f1')
这是相当于
snow
snow
clusterExport
功能的
snowfall

要导出多个变量,您可以使用多个参数或
列表
参数:

sfExport('f1', 'x')
sfExport(list=c('f1', 'x'))
要导出全局环境中的所有变量,请使用
sfExportAll

sfExportAll()

太好了,谢谢。对于复杂的实现,sfExportAll()可能会起作用?@user2762408
sfExportAll
如果您想导出全局环境中的所有内容,则很方便,并且可以使用
except
选项排除不需要的变量。您还可以使用
sfExport
导出多个变量,但必须将它们全部命名。
sfExportAll()