web-dev-qa-db-fra.com

Redémarrer R dans Rstudio

J'essaie d'appeler un script python simple depuis R à l'aide de system2 (). J'ai lu des informations que j'ai trouvées vagues et qui disaient que si "trop" de mémoire était utilisée, cela ne fonctionnerait pas. 

Si je charge un grand ensemble de données et utilise certaines informations à utiliser comme arguments à transmettre à system2 (), cela ne fonctionnera que si je clique manuellement sur "Redémarrer R" dans l'appel Rstudio. 

Ce que je veux:

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

Cela ne fonctionnera pas tel quel. La boucle for est simplement passée.

Ce dont j'ai besoin:

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

Cette réponse n'a pas tout à fait ce que je veux. À savoir, cela ne fonctionne pas pour moi dans Rstudio et appelle "système" (ce qui pose le même problème que "système2" dans ce cas). En fait, lorsque je mets la réponse mentionnée ci-dessus dans mon fichier Rprofile.site, cela ferme tout de suite rstudio:

J'ai essayé la suggestion comme une fonction normale (plutôt que d'utiliser "makeActiveBinding", et cela n'a pas vraiment fonctionné.

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

J'ai essayé plusieurs variantes de ces deux options ci-dessus, mais cela prend du temps pour ce qui semble être une simple question. Il y a beaucoup de choses que je ne comprends pas encore au sujet du processus de démarrage et "makeActiveBinding" est un peu mystérieux. Est-ce que quelqu'un peut-il me montrer la bonne direction?

31
Ben Hunter

Dans Rstudio, vous pouvez redémarrer la session R en:

command/ctrl + shift + F10 

Vous pouvez aussi utiliser:

.rs.restartR()
54
mgoldwasser

RStudio a cette rs.restartR() non documentée qui est supposée faire exactement cela: redémarrer R.

Cependant, il ne décharge pas les paquetages chargés ni ne nettoie pas l'environnement, de sorte que j'ai des doutes sur le redémarrage de R.

8
Arthur

Avez-vous essayé d'intégrer l'appel de fonction dans la fonction apply plutôt que dans une boucle for?

Certains morceaux de code qui ont épuisé la mémoire système dans une boucle for fonctionnent parfaitement avec apply. Cela pourrait aider?

0
Nathan Hatch