R 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 <- 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/

相关文章:

r - 如何在降雪时输出消息?

r - 操作图中数据点的位置

r - 如何在 R 中的 ggsurvplot/survminer 的 x 轴上添加特定值?

r - 如何修改vscode中的自动格式化规则?

c# - 并行运行两个循环

perl - Perl 子例程可以返回数据但继续处理吗?

r - 并行运行时写入全局环境

r - ggmap:注释错误

node.js - 无法在不阻塞 DigitalOcean 的情况下运行多个 Node 子进程

在多个内核上运行不同的程序