我有以下的代码:
myfun <- function() {
fun2()
return(1+1)
}
我希望fun2()被调用后立即进入下一行,而不必等待结果。函数fun2没有返回任何内容,我不在意它何时完成,我只需要启动它。最佳方法是什么?并行处理、多线程、异步调用?如果有代码示例将不胜感激。
我有以下的代码:
myfun <- function() {
fun2()
return(1+1)
}
我希望fun2()被调用后立即进入下一行,而不必等待结果。函数fun2没有返回任何内容,我不在意它何时完成,我只需要启动它。最佳方法是什么?并行处理、多线程、异步调用?如果有代码示例将不胜感激。
future包(我是作者)提供以下功能:
library("future")
plan(multisession)
myfun <- function() {
future(fun2())
return(1+1)
}
除非fun2()
是用于纯副作用的函数,否则通常需要检索该future表达式的值,方法如下:
f <- future(fun2())
y <- fun3()
v <- value(f)
z <- v + y
另一种选择是使用 %<-%
运算符,例如:
v %<-% fun2()
y <- fun3()
z <- v + y
顺便提一下,如果您使用
plan(cluster, workers = c("n1", "n3", "remote.server.org"))
那么,未来表达式将在这些机器上的一台上解析。使用
plan(future.batchtools::batchtools_slurm)
将导致任务通过Slurm作业调度程序队列解决。
foreach
接口,还是furrr
呢? - jiggunjer最终我采用了以下解决方案:
Rpath <- Find(file.exists, c(commandArgs()[[1]], file.path(R.home("bin"), commandArgs()[[1]]),
file.path(R.home("bin"), "R"), file.path(R.home("bin"), "Rscript.exe")))
out <- system('%s --no-save --slave -e \"Your R code here\" ', wait=FALSE)