100 votes

Quitter et redémarrer une session R propre à partir de R ?

Y a-t-il un moyen de créer un alias, dans R, qui exécutera q() et ensuite redémarrer une session R propre ?

Et oui, je suis trop paresseux pour taper. q() et ensuite la lettre R :)

0 votes

Eh bien, vous pouvez vider votre espace de travail avec rm(list=ls()) mais ce n'est pas ce que vous voulez dire, n'est-ce pas ?

2 votes

Voulez-vous également détacher tous les paquets et autres choses que vous avez pu attacher ?

2 votes

Une suggestion serait peut-être d'ajouter une nouvelle option save pour q() tels que "r" qui redémarre R sans sauvegarder l'espace de travail. Ensuite, un alias pour q("r") pourrait être affecté à une nouvelle fonction qui redémarre R.

5voto

Eduardo Alvim Points 41

Après avoir cherché une solution à ce problème, j'ai résolu mon problème en me basant sur cette solution aquí en utilisant le paquet R RDCOMClient .
La solution ci-dessous fonctionne uniquement dans RStudio (Windows), une fois qu'elle simule les touches ctrl+ shift + F10. .

Le paquet RDCOMClient doit être installé avec la commande ci-dessous :

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

Le code pour simuler les pressions sur 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ée par '^' et la touche shift par '+'. Toutes les explications concernant la représentation de ces touches sont disponibles. aquí .

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 la procédure suivante @steadyfish Le commentaire de l'utilisateur. C'est-à-dire qu'il supprime toutes les données de la session actuelle et décharge tous les paquets chargés dans la session.

3voto

Andrea Points 517

Écrivez cette fonction dans votre fichier .Rprofile.

r <- function() {
  assign('.Last',  function() {system('R')}, envir = globalenv())
  quit(save = 'no')
}

r() redémarre votre session R. Les paquets chargés ne seront pas rechargés. Votre environnement ne sera pas sauvegardé.

Fonctionne pour Linux. Aucune idée de ce qui peut se passer sur d'autres OS

1voto

mron Points 95

J'avais besoin de la même fonctionnalité de rafraîchissement de la session sous Windows et je me suis retrouvé 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 fichier. Il se trouve sous le nom de R etc répertoire. Faites également attention à la dernière partie du chemin d'accès, le bin/x64 peut changer en fonction de la configuration de votre système. J'espère que cela aidera d'autres personnes.

1voto

HenrikB Points 94

Dans la lignée de l'idée de Martin Morgan d'utiliser .Last() ; cela redémarre R avec le même ensemble d'options de ligne de commande que celui appelé précédemment :

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

2 votes

Pour info, j'ai ajouté startup::restart() à la démarrage comme moyen pratique de redémarrer R.

1voto

Suntropical Points 31

Je pense que l'on réalise la meilleure utilisation de R en définissant un répertoire de travail courant dans les options. Ensuite, chaque fois que votre espace de travail/fichier de session commence à vous montrer ou qu'il contient suffisamment de votre travail (entre deux projets), vous pouvez simplement renommer ce fichier de session par défaut dans le répertoire de travail après avoir fermé R et R/Rstudio vous fera automatiquement démarrer dans un nouvel espace de travail/fichier de session, sans perturber votre travail actuel.

N'oubliez pas de quitter R et de renommer le fichier de la session en cours

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 les opérations sur eux ont été faites après la copie des objets originaux afin qu'ils soient tels quels. Croyez-moi, savoir que vous pouvez toujours charger les anciens espaces de travail est une tentation mais est plus utile que non.

En bref, quittez R, il vous donne un certain temps avant de quitter, ce qui signifie que cet espace de travail est plein, renommez-le après avoir terminé de quitter et redémarrez R/Rstudio avec un nouvel espace de travail. Vous pouvez toujours charger les objets sélectionnés dans le nouvel espace de travail. Idéalement, tout le travail important devrait se trouver dans les répertoires de projet, mais vous avez toujours besoin d'un historique de vos travaux pour y revenir parfois et les sessions enregistrées sont utiles à un moment donné lorsque vous travaillez sur des projets plus longs. Si vous n'avez pas besoin de tout cela, il vous suffit de cliquer sur le bouton rm(list=ls())

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

OPTION DE RECHANGE

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 à votre guise et d'ouvrir autant d'espaces de travail que vous le souhaitez. besoin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X