2013-03-27 21 views
24

Ich versuche, ein einfaches Python-Skript aus R mit System2() aufrufen. Ich habe einige Informationen gelesen, die ich vage fand, dass, wenn 'zu viel' Speicher verwendet wird, es nicht funktionieren wird.Neustart R in Rstudio

Wenn ich ein großes Dataset laden und einige Informationen darin verwenden, um als Argumente in system2() zu übergeben, funktioniert es nur, wenn ich im Aufruf Rstudio manuell auf "Restart R" klicke.

Was ich will:

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

Dies wird nicht wie arbeiten. Die for-Schleife wird einfach übergeben.

Was ich brauche:

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 nicht recht bekommen, was ich will. Nämlich, es funktioniert nicht für mich innerhalb von Rstudio und es ruft "System" auf (was in diesem Fall das gleiche Problem wie "System2" darstellt). In der Tat, wenn ich die Antwort referenzierte oben in meiner Rprofile.site-Datei, schloss es sofort sofort:

Ich versuchte den Vorschlag als eine normale Funktion (anstatt mit "makeActiveBinding", und es hat nicht ganz funktioniert .

##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") } 

habe ich versucht, über diese beiden Optionen eine Reihe von Variationen, aber dies ist immer lang, was wie eine einfache Frage anfühlt. viel ich über den Startvorgang noch nicht verstehen Es gibt und „makeActiveBinding“ ist ein bisschen mysteriös Kann mir jemand in die richtige Richtung zeigen

+0

Sind Sie sicher, dass Sie wirklich das ganze R neu starten müssen? Wenn Sie 'rm (list = ls())' verwenden, was den Arbeitsbereich bereinigt, und vielleicht die manuelle Garbage Collection mit 'gc()' für den Fall, sollte das ausreichen? –

+0

@BenHunter schließt sofort RStudio, weil Sie 'q' nach dem Neustart aufrufen. Nehmen Sie den Aufruf von "q" und es sollte genau dasselbe tun, als wenn Sie in RStudio "R neu starten" wählen. –

+0

@Hemmo, ich weiß, das ist eine Option, und in diesem Fall könnte es eine gute Wahl sein, aber ich würde gerne wissen, wie ich das lösen kann, ohne meinen Arbeitsbereich zu verlieren (oder zu speichern, zu entfernen und dann neu zu laden) es). –

Antwort

0

Haben Sie versucht, den Funktionsaufruf innerhalb von t einzubetten Er wendet Funktion an, anstatt eine for-Schleife?

Ich hatte einige Teile des Codes, die das System aus dem Speicher in einer for-Schleife lief perfekt mit anwenden. Es könnte helfen?

39

In Rstudio, können Sie die R-Sitzung neu starten von:

command/ctrl + shift + F10 

können Sie auch:

.rs.restartR() 
+1

dies beantwortet die Frage nicht, da es scheint, dass sie eine Befehlszeile wollen – Arthur

5

RStudio hat diese undokumentierten rs.restartR(), die genau das tun soll: Neustart R.

Allerdings lädt es weder die geladenen Pakete, noch reinigt es die Umgebung, so dass ich einige Zweifel habe, ob R überhaupt neu gestartet wird.

+0

Es frei, was auch immer Speicher verwendet wurde aufgebraucht und wurde später veröffentlicht, obwohl ... so tut es etwas (sehr nützlich in einigen Fällen). –