Existe-t-il un moyen de créer un alias, dans R, qui exécutera q()
puis redémarrera une session R propre?
Et oui, je suis trop paresseux pour taper q()
puis la lettre R
:)
Existe-t-il un moyen de créer un alias, dans R, qui exécutera q()
puis redémarrera une session R propre?
Et oui, je suis trop paresseux pour taper q()
puis la lettre R
:)
save
paramètre d' option à q()
, tel que "r"
, qui redémarre R sans enregistrer l'espace de travail. Ensuite, un alias pour q("r")
pourrait être attribué à une nouvelle fonction qui redémarre R.
Réponses:
Si vous êtes dans RStudio: commande / ctrl + shift + F10
Vous pouvez aussi utiliser
.rs.restartR()
.rs.restartR()
ne semble faire aucune de ces choses sur ma machine ..
En fonction de la façon dont vous démarrez R, essayez de placer l'une de ces lignes dans votre .Rprofile
fichier:
makeActiveBinding("refresh", function() { shell("Rgui"); q("no") }, .GlobalEnv)
makeActiveBinding("refresh", function() { system("R"); q("no") }, .GlobalEnv)
Entrez ensuite ceci dans la console R:
refresh
fermera la session en cours et en démarrera une nouvelle.
.Last <- function() system("R")
ou même plus tard dans le cycle d'arrêt reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
. Puis q()
continue de revenir.
J'ai trouvé que .rs.restartR () fonctionne de manière similaire à appuyer sur ctrl + shift + F10. mais ne pas décharger les colis
getAnywhere(".rs.restartR")
cela semble être dans tools:rstudio
. Je n'ai pas eu la chance d'accéder à cela dans une session R. pure.
.rs.restartR()
ne décharge pas les paquets, donc ce n'est pas exactement la même chose quectrl+shift+f10
Ancien message, mais aucune des réponses ne fonctionne vraiment (pour moi, j'utilise Windows, je n'en ai pas testé d'autres), alors j'ajouterai ma solution. Une partie de ma terminologie n'est peut-être pas ici, mais cela devrait faire passer le message:
Les réponses ci-dessus ne fonctionnent pas tout à fait
La plupart des réponses soumises ici impliquent l'utilisation shell
ou system
qui ne fonctionne pas tout à fait car, bien qu'ils ouvrent une nouvelle console R et demandent à la console d'origine de se fermer, la nouvelle console est un processus s'exécutant 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 n'est pas fermée. Certains des utilisateurs ci-dessus, tels que hedgedandlevered, ont signalé que la fermeture de la console d'origine obligeait la nouvelle console à se fermer. Quand j'essaye, la nouvelle console s'ouvre, mais l'ancienne console reste ouverte dans un état gelé jusqu'à ce que la nouvelle console soit fermée.
Le problème de base appelle shell
ou system
ne modifie pas le contexte de l'application de la console d'origine à la nouvelle, et par conséquent le processus d'origine ne peut pas se terminer tant que la nouvelle console n'est pas fermée.
Alternative qui fonctionne pour moi
Utilisez plutôt shell.exec
ce qui serait normalement utilisé pour ouvrir un fichier dans l'application par défaut en fonction du type de fichier. Lorsqu'il est utilisé sur un .exe, apparemment, il exécute l'exécutable. La différence importante, cependant, est que le système démarre l'application dans son propre contexte distinct. Voici donc le code qui fonctionne pour moi:
makeActiveBinding("restart.R", function() { shell.exec(paste0(R.home(),"/bin/x64/Rgui.exe")); q("no") }, .GlobalEnv)
Vous devrez modifier le chemin du fichier /bin/x64/Rgui.exe
pour qu'il corresponde à ce que vous utilisez pour démarrer R. Vous venez de mettre cette ligne dans votre .Rprofile
fichier, puis vous pouvez l'appeler en entrant restart.R
votre code R.
L'inconvénient de cela par rapport aux autres méthodes est que vous ne pouvez pas passer d'arguments de ligne de commande --no-save
comme vous le feriez avec juste shell
, mais au moins cela vous permettra de fermer le processus R d'origine.
Après avoir cherché une solution à cela, j'ai résolu mon problème en me basant sur cette solution ici , en utilisant le package R RDCOMClient .
La solution ci-dessous fonctionne simplement dans RStudio (Windows), une fois qu'elle simule les pressions sur les touches ctrl + shift + F10 .
Le package 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) est:
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 Maj par «+». Toutes les explications de 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 . Autrement dit, il supprime toutes les données de la session en cours et décharge tous les packages chargés dans la session.
Écrivez cette fonction dans votre .Rprofile
r <- function() {
assign('.Last', function() {system('R')}, envir = globalenv())
quit(save = 'no')
}
r()
redémarre votre session R. Les packages chargés ne se rechargeront pas. Votre environnement ne sera pas sauvegardé.
Fonctionne pour Linux. Aucune idée de ce qui peut arriver sur d'autres OS
J'avais besoin de la même fonctionnalité de session d'actualisation sur 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 Rprofile.site
fichier. C'est sous le etc
répertoire de R. Attention également à la dernière partie du chemin qui bin/x64
peut changer en fonction de la configuration de votre système. J'espère que cela aidera les autres aussi.
Conformément à 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 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)
}
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 fichier d'espace de travail / session commence à vous montrer ou en a assez de votre 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 démarrera automatiquement dans un nouveau espace de travail / fichier de session, sans perturber votre travail actuel.
N'oubliez pas de quitter R et de renommer le fichier de session en cours
Bien sûr, si vous ne souhaitez pas enregistrer le travail en cours, vous devez vous assurer que vous réinitialisez les objets ou que les opérations sur eux ont été effectuées après la copie à partir des objets d'origine afin qu'ils soient tels quels. Croyez-moi, savoir que vous pouvez toujours charger les anciens espaces de travail est une tentation, mais c'est plus utile que pas.
En bref, quittez R, cela vous laisse un espace pendant que vous quittez signifie que cet espace de travail est plein, renommez-le après avoir terminé la fermeture et redémarrez R / Rstudio avec un nouvel espace de travail. Vous pouvez toujours charger des objets sélectionnés dans le nouvel espace de travail. Idéalement, tous les travaux importants doivent se trouver dans les répertoires de projet, mais vous avez toujours besoin d'un historique de vos travaux pour y revenir et les sessions enregistrées sont utiles à un moment donné une fois que vous êtes sur des projets plus longs. Si vous n'en avez besoin querm(list=ls())
Aussi, j'aime l' RDComClient
idée de @Eduardo Alvin mais elle a été abandonnée.
OPTION ALTERNATIVE
Une alternative simple pour vous 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 nécessaire.
makeActiveBinding("refresh", function() { system(paste0(R.home(),"/bin/i386/R")); q("no") }, .GlobalEnv)
ou avec --save 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 celle-ci ni la version originale ne fonctionnent pour moi, puisqu'elle redémarre R puis se ferme, une nouvelle fenêtre n'est jamais ouverte. Si quelqu'un peut commenter sur ceci, s'il vous plaît faites-le)
J'ai écrit la fonction suivante. Rappelles toi! Vous ne pouvez l'utiliser qu'une seule 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("\014") #clc
.rs.restartR() #clear session
}
Parfois, le détachement d'un package aide également.
rm(list=ls())
mais ce n'est pas ce que vous voulez dire, n'est-ce pas?