2013-03-27 7 views
24

Я пытаюсь вызвать простой скрипт python из R, используя system2(). Я прочитал некоторую информацию, которую я счел расплывчатой, что сказал, что если используется «слишком большая» память, это не сработает.Перезагрузка R в Rstudio

Если я загружаю большой набор данных и использую в нем какую-либо информацию для использования в качестве аргументов для перехода в system2(), он будет работать, только если я вручную нажму «Перезапустить R» в вызове Rstudio.

Что я хочу:

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()' на всякий случай, этого должно быть достаточно? –

+0

@BenHunter сразу же закрывает RStudio, потому что вы вызываете 'q' после перезапуска. Вызовите вызов 'q', и он должен сделать то же самое, что выбрать Restart R в RStudio. –

+0

@ Хеммо, я знаю, что это вариант, и в этом случае это может быть хорошим выбором, но мне бы очень хотелось узнать, как решить это, так же как и без потери рабочего пространства (или сохранения, удаления и последующей перезагрузки Это). –

ответ

0

Вы пробовали встраивать вызов функции внутри функция apply, а не цикл for?

У меня были некоторые фрагменты кода, в результате чего система из памяти в цикле for работала отлично с применением. Это может помочь?

39

В Rstudio, вы можете перезапустить R сессию:

command/ctrl + shift + F10 

Вы также можете использовать:

.rs.restartR() 
+1

это не отвечает на вопрос, так как кажется, что им нужна командная строка. – Arthur

5

RStudio имеет эту нелегальную rs.restartR() который, как предполагается сделать только что: перезапутить R.

Однако он не выгружает загруженные пакеты и не очищает окружающую среду, поэтому у меня есть некоторые сомнения в том, что он перезапускает R вообще.

+0

Он освобождает всю память, используемую для израсходования, и позже был выпущен, хотя ... поэтому он делает что-то (очень полезное в некоторых случаях). –