为什么 future 包找不到功能?

Why does the future package does not find a function?

我正在使用包 parallel 中的函数 parLapply 实现并行化。此包需要使用函数 clusterExport() 导出对象。在观看了有关包未来的视频后,我认为我可以通过使用它来避免导出步骤。它没有起作用,如下例所示。

代码如下:

library("future")

source("C:\Dropbox\Code\R\TestFuncs.R")

plan(sequential)
plan(multisession, workers=4)
bas <- function(x) {sapply(1:10, bas2(x))}

bar <- function(y) {bas(y)}

foo <- function(x) {bar(x)}

test <- lapply(1:100, function(x) future({ foo(x) }))
testvals <- lapply(test, value)

源文件 TestFuncs.R 包含以下代码:

bas2 <- function(y) { y+1 }

当我尝试 运行 上面的程序时,我在 RStudio 中收到以下消息:

> testvals <- lapply(test, value)
Error in match.fun(FUN) : 
    'bas2(x)' is not a function, character or symbol

Called from: signalConditions(future, exclude = getOption("future.relay.immediate", 
    "immediateCondition"), resignal = TRUE)

Browse[1]> 

我检查了函数 bas2 是否在全局环境中。我还检查了 RGui 会话中是否发生了同样的问题,错误消息更简单。

为什么会发生这种情况,我该如何处理这个问题?

任何帮助将不胜感激。

这似乎与未来没有任何关系。您的 bas 功能似乎不起作用。目前的状态

bas <- function(x) {sapply(1:10, bas2(x))}

运行 它本身给出相同的错误

bas(1)
#  Error in match.fun(FUN) : 
#   'bas2(x)' is not a function, character or symbol 

sapply 的第二个参数需要是函数,而不是表达式。它应该看起来像

bas <- function(x) {sapply(1:10, function(y) bas2(x))}

(注意,我在内部函数中使用了 y,因为我不确定调用 bas2 时您想使用什么 x)。