2013-03-27 18 views
24

Sto provando a chiamare un semplice script python da R usando system2(). Ho letto alcune informazioni che ho trovato vago che diceva che se viene usata "troppa memoria", non funzionerà.Restart R in Rstudio

Se carico un set di dati di grandi dimensioni e utilizzo alcune informazioni in esso da utilizzare come argomenti da passare a system2(), funzionerà solo se faccio clic manualmente su "Riavvia R" nella chiamata Rstudio.

quello che voglio:

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

Questo non funziona così com'è. Il ciclo for viene semplicemente passato sopra.

quello che mi serve:

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 non abbastanza ottenere ciò che voglio. Vale a dire, non funziona per me in Rstudio e chiama "system" (che in questo caso presenta lo stesso problema di "system2"). Infatti, quando ho inserito la risposta di cui sopra nel mio file Rprofile.site, si è appena chiusa rstudio:

Ho provato il suggerimento come una funzione normale (piuttosto che usare "makeActiveBinding", e non ha funzionato abbastanza .

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

ho provato un certo numero di varianti di queste due opzioni di cui sopra, ma questo sta diventando lungo per quello che sembra una semplice domanda. ci sono molte cose che non capisco ancora circa il processo di avvio e "makeActiveBinding" è un po 'misterioso Qualcuno può indicarmi la giusta direzione?

+0

Sei sicuro di aver davvero bisogno di riavviare l'intera R? Se usi 'rm (list = ls())' che pulisce l'area di lavoro, e forse garbage collection manuale con 'gc()' nel caso, dovrebbe essere sufficiente? –

+0

@BenHunter sta chiudendo immediatamente RStudio perché stai chiamando 'q' dopo il riavvio. Prendi la chiamata a 'q' e dovrebbe fare esattamente la stessa cosa che selezionare Riavvia R in RStudio. –

+0

@Hemmo, so che è un'opzione e in questo caso potrebbe essere una buona scelta, ma mi piacerebbe davvero sapere come risolverlo, così come è, senza perdere il mio spazio di lavoro (o salvando, rimuovendo e quindi ricaricando esso). –

risposta

0

Avete provato a incorporare la chiamata di funzione all'interno di t applica la funzione, piuttosto che un ciclo for?

Ho avuto alcuni pezzi di codice che eseguivano il sistema a memoria esaurita in un ciclo for eseguito perfettamente con apply. Potrebbe essere d'aiuto?

39

In Rstudio, è possibile riavviare la sessione di R da:

command/ctrl + shift + F10 

È inoltre possibile utilizzare:

.rs.restartR() 
+1

questo non risponde alla domanda dato che sembra che vogliano una riga di comando – Arthur

5

RStudio ha questo non documentata rs.restartR() che dovrebbe fare proprio questo: il riavvio R.

Tuttavia, non scarica i pacchetti che sono stati caricati, né pulisce l'ambiente, quindi ho qualche dubbio sul riavvio di R.

+0

Libera la memoria usata per essere utilizzata e in seguito è stata rilasciata ... quindi fa qualcosa (molto utile in alcuni casi). –