R Snowfall-实现调用其他函数的函数时遇到的困难
我试图教自己如何使用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
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()可能会起作用?@user2762408sfExportAll
如果您想导出全局环境中的所有内容,则很方便,并且可以使用except
选项排除不需要的变量。您还可以使用sfExport
导出多个变量,但必须将它们全部命名。
sfExportAll()