2013-12-15 98 views
14

有關RStudio的問題。假設我在控制檯上運行的代碼:rstudio - 是否有可能在後臺運行代碼

> code1() 

假設上述code1()什麼也不打印在控制檯上,但code1()需要一個小時才能完成。當我等待code1()時,我想要做其他事情。可能嗎?比方說,有沒有像runInBackground的功能,我可以使用如下

> runInBackground(code1()) 
> code2() 

可替換的選擇運行的兩個RStudios或編寫使用Rscript運行code1()一個批處理文件,但我想知道是否有東西容易些我可以不離開RStudio控制檯。我嘗試瀏覽R的幫助文檔,但沒有提出任何事情(或者可能是我沒有使用正確的關鍵字)。

+3

密切相關這是不可能的。 R是單線程的。改爲運行兩個獨立的R進程。 – Thomas

+0

另外,請不要將RStudio與R混淆.RStudio只是一個IDE。 RStudio啓動一個R本身的實例,這就是實際運行你的代碼的實例。 – joran

+0

這意味着運行批處理文件應該成功。 –

回答

4

你總是可以做到這一點,這是不理想,但適用於多數用途:

shell(cmd = 'Rscript.exe some_script.R', wait=FALSE) 
4

parallel包會做的伎倆的mcparallel()函數,如果你是在Linux上,這是。 ..

library(parallel) Job1 = mcparallel(code1()) JobResult1 = mccollect(Job1)

3

future package(我是作者)提供了這一點:

library("future") 
plan(multiprocess) 

future(code1()) 
code2() 

僅供參考,如果你使用

plan(cluster, workers = c("n1", "n3", "remote.server.org")) 

那麼未來表達在這些機器上的一個解決。使用

plan(future.BatchJobs::batchjobs_slurm) 

將導致它通過Slurm作業調度程序隊列解決。

此問題與Run asynchronous function in R

相關問題