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
:)
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
:)
Je crois que l'ouverture d'une "session R propre" nécessite que 1-Les données de la session actuelle soient supprimées ; 2-Les paquets de la session actuelle soient déchargés. .rs.restartR()
ne semble pas faire l'une ou l'autre de ces choses sur ma machine
Selon la façon dont vous démarrez 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 en entrant ceci dans la console R :
refresh
fermera la session en cours et en lancera une nouvelle.
Ou .Last <- function() system("R")
ou même plus tard dans le cycle d'arrêt reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
. Ensuite, q()
ne cesse de revenir.
Cette solution fonctionne mais n'est pas reproductible lorsque mon script est exécuté par d'autres personnes. Existe-t-il une commande à inclure dans le script de R pour relancer la session R ? (la raison étant que je veux que tous les paquets soient détachés)
Cela fonctionne dans RStudio - mais je ne suis pas sûr qu'il y ait un moyen de le faire fonctionner ailleurs. De getAnywhere(".rs.restartR")
il semble être dans tools:rstudio
. Je n'ai pas eu la chance d'y accéder dans une session de R pur.
Vieux post, mais aucune des réponses ne fonctionne (pour moi, j'utilise Windows, je n'ai pas testé les autres), donc je vais ajouter ma solution. Il se peut que ma terminologie soit erronée, mais elle devrait permettre de 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
o system
ce qui ne fonctionne pas tout à fait car, bien qu'ils ouvrent une nouvelle console R et demandent à la console originale de se 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, comme Hedgedandlever, ont signalé que la fermeture de la console d'origine force la fermeture de la nouvelle console. Lorsque j'essaie, la nouvelle console s'ouvre, mais l'ancienne console reste ouverte dans un état figé jusqu'à ce que la nouvelle console soit fermée.
Le problème de base est d'appeler shell
o system
ne change pas le contexte de l'application de la console d'origine à la nouvelle, et donc le processus d'origine ne peut pas se terminer 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 l'application par défaut en fonction du type de fichier. Lorsqu'il est utilisé sur un .exe, il exécute apparemment l'exécutable. La différence importante, cependant, est que le système lance l'application dans son propre contexte séparé. 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 correspondre à ce que vous utilisez pour démarrer R. Il suffit de mettre cette ligne dans votre .Rprofile
puis vous pouvez l'appeler en entrant restart.R
dans votre code R.
L'inconvénient de cette méthode par rapport aux autres 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 le processus R original.
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.
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
pourq()
tels que"r"
qui redémarre R sans sauvegarder l'espace de travail. Ensuite, un alias pourq("r")
pourrait être affecté à une nouvelle fonction qui redémarre R.