导出带有未来的手动错过的全局对象

时间:2019-05-23 20:02:12

标签: r future

我在包中定义了一个函数template <typename F> MemoizedFunctor(F) -> MemoizedFunctor<F, decltype(getOut(std::declval<F>())), typename decltype(getIn(std::declval<F>()))::type>; ,该包将数据和R表达式作为输入,然后将用户定义的表达式应用于数据。这是该函数的用法示例:

f

使用显式期货和用户定义的对象的此函数的并行版本会出现问题。这里是玩具版本:

f <- function(data, expr) {
  expr <- substitute(expr)
  eval(expr, envir = data)
}

data <- data.frame(a = 1:2, b = 3:4)
f(data, mean(a))
#> [1] 1.5

问题在于library(future) f <- function(data, expr) { expr <- substitute(expr) y <- future::future(eval(expr, envir = data)) future::value(y) } data <- data.frame(a = 1:2, b = 3:4) myfun <- function(x){sum(sqrt(x))} plan(sequential) f(data, myfun(a)) #> [1] 2.414214 plan(multiprocess) f(data, myfun(a)) #> Error in myfun(a) : impossible to find function "myfun" 无法轻易找到myfun,因此必须手动将其导出。我可以通过使用future分析expr并手动添加对象来解决此问题:

future::getGlobalsAndPackages

我想知道是否有更好/更好的方法来做到这一点,因为这对我来说似乎是个黑客。

1 个答案:

答案 0 :(得分:0)

我终于发现plan中的省略号传播到future

 plan(multiprocess, globals = myfun)