Quitter et redémarrer une session R propre à partir de L'intérieur de R?

y a-t-il un moyen de créer un alias dans R qui exécutera q() et le redémarrage d'une session R propre?

Et oui, je suis trop paresseux pour le type q() , puis la lettre R :)

61
demandé sur Gavin Simpson 2011-06-11 03:42:30

10 réponses

si vous êtes à RStudio: commande/ctrl + maj + F10

vous pouvez également utiliser

.rs.restartR()
49
répondu mgoldwasser 2016-02-12 16:38:28

en fonction de la façon dont vous commencez R essayez de placer une de ces lignes dans votre .Rprofile fichier:

makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv)

makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)

puis entrer ceci dans la console R:

refresh

va fermer la session en cours et le démarrage d'une nouvelle.

48
répondu G. Grothendieck 2011-06-11 12:14:37

j'ai trouvé ça .rs.restartR () fonctionne tout aussi bien en appuyant sur ctrl+shift+F10.

7
répondu Adam Lee Perelman 2015-10-13 12:11:33

vieux post, mais aucune des réponses tout à fait travailler (pour moi, j'utilise Windows, n'ont pas testé d'autres), donc je vais ajouter ma solution. Une partie de ma terminologie pourrait être ici, mais cela devrait faire passer le point:

les réponses ci-dessus ne fonctionnent pas tout à fait

la plupart des réponses soumises ici impliquent l'utilisation de shell ou system qui ne fonctionne pas tout à fait parce que pendant qu'ils ouvrent une nouvelle console R et donnent des instructions à la console d'origine à fermer, la nouvelle console est un processus exécuté dans le contexte d'application de l'ancienne console. Cela signifie que la console d'origine ne peut pas se fermer tant que la nouvelle console ne se ferme pas. Certains des utilisateurs ci-dessus tels que hedgedandlevered ont rapporté que la fermeture de la console originale oblige la nouvelle console à fermer. Quand j'essaie, la nouvelle console s'ouvre, mais l'ancienne reste ouverte jusqu'à ce que la nouvelle console soit fermée.

Le problème de base est d'appeler shell ou system ne change pas le contexte de l'application de la console originale à la nouvelle, et par conséquent le processus original ne peut pas prendre fin avant la fermeture de la nouvelle console.

Alternative qui fonctionne pour moi

utilisez plutôt shell.exec qui serait normalement utilisé pour ouvrir un fichier dans la demande par défaut basé sur le type de fichier. Lorsqu'il est utilisé sur un .exe, apparemment, il exécute l'exécutable. L'important la différence, cependant, est que le système démarre l'application dans son propre contexte. Donc voici le code qui fonctionne pour moi:

makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)

vous aurez besoin d'éditer le chemin du fichier /bin/x64/Rgui.exe pour correspondre à ce que vous utilisez pour démarrer R. vous venez de mettre cette ligne dans votre fichier .Rprofile , alors vous pouvez l'appeler en entrant restart.R dans votre code R.

l'inconvénient de ceci par rapport à d'autres méthodes est que vous ne pouvez pas passer des arguments de ligne de commande comme --no-save comme vous le feriez avec juste shell , mais au moins cela vous permettra de fermer l'original R processus.

3
répondu Matthew 2017-07-27 14:18:45

j'avais besoin de la même fonctionnalité de session de rafraîchissement sur windows et j'ai fini avec une version légèrement modifiée du code:

makeActiveBinding("refresh", function() { shell(paste0("start \"\" \"", R.home(), "/bin/x64/Rgui.exe\"")); q("no") }, .GlobalEnv)

sous windows, vous devez modifier le fichier Rprofile.site . Il est dans le répertoire etc de R. Attention également à la dernière partie du chemin que le bin/x64 peut changer en fonction de la configuration de votre système. J'espère que cela aidera les autres aussi.

1
répondu mron 2015-04-10 14:31:14

après avoir cherché une solution à cela, j'ai résolu mon problème basé sur cette solution ici , en utilisant le paquet R RDCOMClient .

la solution ci-dessous ne fonctionne qu'au sein de RStudio (Windows), une fois qu'elle simule les touches Ctrl+ shift + F10 .

le paquet RDCOMClient doit être installé avec la commande suivante:

install.packages("RDCOMClient", repos = "http://www.omegahat.net/R")

le code à simuler les touches dans RStudio (Windows 10) sont:

library(RDCOMClient) 
wsh <- COMCreate("Wscript.Shell") 
wsh$SendKeys("^+{F10}") 

Dans la dernière ligne du code ci-dessus, la touche "ctrl" est représenté par " ^ " et la touche shift '+'. Toutes les explications pour ces représentations clés sont disponibles ici .

juste après avoir exécuté la dernière ligne du code ci-dessus, toute la session R dans RStudio sera réinitialisée, selon le commentaire de @steadyfish . C'est, il supprime toutes les données de la session courante et décharge tous les paquets chargés dans la session.

1
répondu Eduardo Alvim 2018-06-01 01:26:15

je pense, on réalise la meilleure utilisation de R en mettant un répertoire de travail courant dans les options. Ensuite, chaque fois que votre fichier workspace /session commence à vous montrer ou que vous avez assez de travail (entre les projets), Vous pouvez simplement renommer ce fichier de session par défaut dans le répertoire de travail après la fermeture de R et R/Rstudio vous lancera automatiquement dans un nouveau fichier workspace/session, sans déranger votre travail actuel.

N'oubliez pas d'arrêter et de renommer le fichier de session actuel

bien sûr, si vous ne voulez pas sauvegarder le travail en cours, vous devez vous assurer que vous avez réinitialisé les objets ou que les opérations sur eux ont été faites après avoir copié à partir des objets originaux afin qu'ils soient tels quels. Croyez-moi, savoir que vous pouvez toujours charger les vieux espaces de travail est une tentation mais est plus utile que pas.

en bref arrêter r, il vous donne un certain écart tout en cessant signifie que cet espace de travail est plein, le renommer après avoir terminé le quit et redémarrez R / Rstudio avec un nouvel espace de travail. Vous pouvez toujours charger des objets select dans le nouvel espace de travail. Idéalement, tous les travaux importants devraient être dans les répertoires de projet, mais vous avez encore besoin d'un historique de vos travaux pour revenir à parfois et les sessions sauvegardées sont utiles à un moment donné une fois que vous êtes sur des projets plus longs. Si vous n'avez pas besoin de tout cela juste rm(list=ls())

aussi, j'aime l'idée RDComClient de @Eduardo Alvin mais elle a été abandonnée.

ALTERNATIVE OPTION

une alternative simple pour se débarrasser des bagages à tout moment dans votre espace de travail est d'utiliser save.image

save.image("Rstreamingscience.data")
quit(save='no')
load("Rstreamingscience.data") ##G:/ADA registers##
save.image("Rstreamingscience.data")

cela vous laisse libre d'aller et venir comme bon vous semble et d'ouvrir autant d'espaces de travail que vous besoin.

1
répondu Suntropical 2018-09-07 08:38:00
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)

ou-ou --no-save

paste0(R.home(),"/bin/i386/R --no-save")

je pense que c'est ce dont vous avez besoin si vous avez utilisé setwd() avant d'appeler refresh (bien que ni cette version ni la version originale ne fonctionne pour moi, puisqu'elle redémarre alors se ferme, une nouvelle fenêtre n'est jamais ouverte. Si quelqu'un peut commenter sur ce, merci de le faire)

0
répondu hedgedandlevered 2014-04-11 15:34:05

j'ai écrit la fonction suivante. N'oubliez pas! Vous ne pouvez l'utiliser qu'une fois, puis vous devez le recharger après le redémarrage de la session R.

clc <- function() {
  rm(list = ls(envir = globalenv()),envir = globalenv()) #clear Vars from global enviroment
  gc()  #grabage colector
  cat("4") #clc
  .rs.restartR() #clear session
}

détacher parfois un paquet aide aussi.

0
répondu Adam Lee Perelman 2015-11-16 15:19:27

en ligne avec L'idée de Martin Morgan d'utiliser .Last() ; ce redémarre R avec le même ensemble d'options de ligne de commande comme précédemment appelé:

restart_r <- function(status = 0, debug = TRUE) {
  if (debug) message("restart_r(): Customizing .Last() to relaunch R ...")
  assign(".Last", function() {
    args <- commandArgs()
    system2(args[1], args = args[-1])
  }, envir = globalenv())   
  if (debug) message("restart_r(): Quitting current R session and starting a new one ...")
  quit(save = "no", status = status, runLast = TRUE)
}
0
répondu HenrikB 2017-05-04 20:52:49