关于RStudio的问题。假设我在控制台中运行代码:
> code1()
假设code1()
在控制台上没有打印任何内容,但上面的code1()
需要一个小时才能完成。在等待code1()
的时候,我想继续处理其他事情。可能吗?是否有像runInBackground
这样的函数,我可以使用如下
> runInBackground(code1())
> code2()
备选方案正在运行两个RStudios或编写一个使用Rscript
来运行code1()
的批处理文件,但我想知道如果不离开RStudio控制台我能做些什么更容易。我试图浏览R的帮助文档,但没有提出任何东西(或者可能是我没有使用正确的关键字)。
答案 0 :(得分:10)
future package(我是作者)提供了这个:
library("future")
plan(multiprocess)
future(code1())
code2()
仅供参考,如果您使用
plan(cluster, workers = c("n1", "n3", "remote.server.org"))
然后在其中一台机器上解析未来的表达式。使用
plan(future.BatchJobs::batchjobs_slurm)
将导致它通过Slurm作业调度程序队列解析。
密切相关答案 1 :(得分:6)
您可以随时执行此操作,但这并非理想,但适用于大多数用途:
shell(cmd = 'Rscript.exe some_script.R', wait=FALSE)
答案 2 :(得分:5)
parallel包中的mcparallel()函数可以解决问题,如果你在Linux上,那就是......
library(parallel)
Job1 = mcparallel(code1())
JobResult1 = mccollect(Job1)
答案 3 :(得分:0)
1.2版的RStudio提供了此功能。要在后台运行脚本,请在“作业”面板中选择“开始作业”。您还可以选择将后台作业结果复制到工作环境中。