为什么 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
)。
我正在使用包 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
)。