我有以下代码:
myfun <- function() {
fun2()
return(1+1)
}
我想调用fun2()然后移动到下一行而不等待结果。函数fun2没有返回任何内容,我不在乎它什么时候完成,我只需要启动它。实现它的最佳方法是什么?并行进程,多线程,异步调用?任何代码示例都表示赞赏。
答案 0 :(得分:6)
future package(我是作者)提供了这个:
library("future")
plan(multiprocess)
myfun <- function() {
future(fun2())
return(1+1)
}
除非fun2()
的功能纯粹用于其副作用,否则您通常希望检索该未来表达式的值,您可以这样做:
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.BatchJobs::batchjobs_slurm)
将导致它通过Slurm作业调度程序队列解析。
答案 1 :(得分:2)
最终我停止了以下解决方案:
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)
第一行搜索R可执行文件的路径,第二行从命令行环境执行R代码而不等待结果。