2013-03-27 613 views
24

我想從R內使用system2()調用一個簡單的python腳本。我讀過一些我發現含糊不清的信息,說如果使用了「太多」的內存,它將無法工作。在Rstudio內重新啓動R

如果我加載一個大型數據集並使用其中的某些信息作爲參數傳遞到system2(),它只有在我手動點擊調用Rstudio中的「Restart R」時纔有效。

我想要什麼:

df <- read.csv('some_large_file.csv') 
###extracting some info called 'args_vec' 
for(arg in args_vec){ 
    system2('python', args) 
} 

這將無法正常工作的。 for循環簡單地通過。

我需要什麼:

df <- read.csv('some_large_file.csv') 
###extracting some info called 'args_vec' 
###something that 'restarts' R 
for(arg in args_vec){ 
    system2('python', args) 
} 

This answer沒有完全得到我想要的東西。也就是說,它在Rstudio中不適用於我,它稱之爲「系統」(在這種情況下,它表現出與「system2」相同的問題)。實際上,當我將上面提到的答案放在我的Rprofile.site文件中時,它剛剛立即關閉了rstudio:

我試過這個建議作爲一個普通函數(而不是使用「makeActiveBinding」,它並沒有工作。

##restart R in r session -- doesn't work 
makeActiveBinding("refresh", function() { system("R --save"); q("no") }, .GlobalEnv) 

##nor did this: 
refresh <- function() { system("R --save"); q("no") } 

我嘗試了一些上面這兩個選項的變化,但這需要很長什麼感覺就像一個簡單的問題,有很多我還不知道有關的啓動過程,「makeActiveBinding」是否有點神祕。任何人都可以指向正確的方向嗎?

+0

你確定你確實需要重新啓動整個R嗎?如果使用'rm(list = ls())'來清理工作區,並且可能使用'gc()'手動垃圾收集以防萬一,這應該足夠了? – 2013-03-27 19:09:54

+0

@BenHunter它會立即關閉RStudio,因爲您在重新啓動後調用'q'。取出呼叫到'q',它應該與在RStudio中選擇重新啓動R完全一樣。 – 2013-03-27 19:42:53

+0

@Hemmo,我知道這是一個選項,在這種情況下,它可能是一個不錯的選擇,但我真的想知道如何解決這個問題,而不會丟失我的工作空間(或保存,刪除,然後重新加載它)。 – 2013-03-27 22:00:24

回答

0

您是否試過在t中嵌入函數調用他應用函數,而不是for循環?

我已經有一些代碼運行系統的內存在for循環運行完美的應用程序與完美。它可能有幫助嗎?

39

在Rstudio,您可以通過重新啓動R對話:

command/ctrl + shift + F10 

您還可以使用:

.rs.restartR() 
+1

這並沒有回答這個問題,因爲它似乎他們想要一個命令行 – Arthur 2016-02-01 14:42:55

5

RStudio有這個無證rs.restartR()這是應該能夠做到這一點:重新啓動R.

但是,它不會卸載已加載的軟件包,也不會清理環境,所以我對於它是否重新啓動R有些懷疑。

+0

它釋放了以前用過的所有內存,後來被釋放,所以它做了一些事情(在某些情況下非常有用)。 – 2017-08-04 21:59:03