Nun, Sie können Ihren Arbeitsbereich mit rm(list=ls())löschen, aber das ist nicht das, was Sie meinen, oder?
Sacha Epskamp
2
Möchten Sie auch Pakete und andere Dinge entfernen, die Sie möglicherweise angehängt haben?
Spacedman
2
Vielleicht eine Anregung eine neue Option hinzuzufügen wäre saveParameter q(), wie zum Beispiel "r", dass Neustarts R ohne den Arbeitsbereich zu speichern. Dann könnte ein Alias für q("r")einer neuen Funktion zugewiesen werden, die R.
Greg
Antworten:
75
Wenn Sie sich in RStudio befinden: Befehl / Strg + Umschalt + F10
Ich glaube, das Öffnen einer "sauberen R-Sitzung" erfordert, dass 1-Daten aus der aktuellen Sitzung entfernt werden. 2-Pakete aus der aktuellen Sitzung werden entladen. .rs.restartR()scheint keines dieser Dinge auf meiner Maschine zu tun ..
Steadyfish
3
Ich finde die .rs.restartR () nützlich für Fälle, in denen R auch nach dem Entfernen keinen Speicher freigeben würde (list = ls ()); gc ();. Dies macht definitiv die Erinnerung frei. Ich mag auch die Tatsache, dass es keine Pakete löst.
Richard DiSalvo
56
Abhängig davon, wie Sie R starten, versuchen Sie, eine dieser Zeilen in Ihre .RprofileDatei einzufügen:
oder .Last <- function() system("R")oder sogar später im Abschaltzyklus reg.finalizer(.GlobalEnv, function(e) system("R"), TRUE). Dann kommt q()immer wieder zurück.
Martin Morgan
1
Stellen Sie sicher, dass R auf Ihrem Pfad ist.
G. Grothendieck
2
Diese Lösung funktioniert, ist jedoch nicht reproduzierbar, wenn mein Skript von anderen ausgeführt wird. Gibt es einen Befehl, der in das R-Skript aufgenommen werden muss, um die R-Sitzung neu zu starten? (Der Grund dafür ist, dass ich möchte, dass alle Pakete getrennt werden)
Heisenberg
12
Ich fand, dass .rs.restartR () ähnlich funktioniert wie Strg + Umschalt + F10. aber entladen Sie die Pakete nicht
Funktioniert in RStudio - aber ich bin mir nicht sicher, ob es eine Möglichkeit gibt, es irgendwo anders zum Laufen zu bringen. Daraus getAnywhere(".rs.restartR")scheint es zu sein tools:rstudio. Ich hatte kein Glück, in einer reinen R-Sitzung darauf zuzugreifen.
Gregor Thomas
9
.rs.restartR()entlädt die Pakete nicht, so ist es nicht genau das gleiche wiectrl+shift+f10
Arthur
4
Alter Beitrag, aber keine der Antworten funktioniert ganz (für mich verwende ich Windows, habe andere nicht getestet), also werde ich meine Lösung hinzufügen. Einige meiner Begriffe sind hier möglicherweise nicht korrekt, aber dies sollte den Punkt vermitteln:
Die obigen Antworten funktionieren nicht ganz
Die meisten der hier eingereichten Antworten beziehen sich auf die Verwendung shelloder systemfunktionieren nicht ganz, da die neue Konsole zwar geöffnet und die ursprüngliche Konsole zum Schließen angewiesen wird, die neue Konsole jedoch im Anwendungskontext der alten Konsole ausgeführt wird. Das bedeutet, dass die ursprüngliche Konsole erst geschlossen werden kann, wenn die neue Konsole geschlossen wird. Einige der oben genannten Benutzer, wie z. B. Hedgedandlevered, berichteten, dass das Schließen der ursprünglichen Konsole das Schließen der neuen Konsole erzwingt. Wenn ich es versuche, wird die neue Konsole geöffnet, aber die alte Konsole bleibt im eingefrorenen Zustand geöffnet, bis die neue Konsole geschlossen wird.
Das Grundproblem besteht darin, den Anwendungskontext von der ursprünglichen Konsole auf die neue aufzurufen shelloder systemnicht zu ändern. Daher kann der ursprüngliche Prozess erst beendet werden, wenn die neue Konsole geschlossen wird.
Alternative, die für mich funktioniert
Verwenden Sie stattdessen shell.execdie Option, die normalerweise zum Öffnen einer Datei in der Standardanwendung basierend auf dem Dateityp verwendet wird. Bei Verwendung auf einer EXE-Datei wird anscheinend die ausführbare Datei ausgeführt. Der wichtige Unterschied besteht jedoch darin, dass das System die Anwendung in einem eigenen Kontext startet. Hier ist der Code, der für mich funktioniert:
Sie müssen den Dateipfad so bearbeiten, dass er mit dem /bin/x64/Rgui.exeübereinstimmt, mit dem Sie R starten. Sie fügen diese Zeile einfach in Ihre .RprofileDatei ein und können sie durch Eingabe restart.RIhres R-Codes aufrufen .
Der Nachteil gegenüber anderen Methoden ist, dass Sie keine Befehlszeilenargumente wie --no-savebei nur übergeben können shell, aber zumindest können Sie so den ursprünglichen R-Prozess schließen.
Nachdem ich nach einer Lösung dafür gesucht hatte, löste ich mein Problem basierend auf dieser Lösung hier mit dem R-Paket RDCOMClient . Die unten stehende Lösung funktioniert nur in RStudio (Windows), sobald die Tastendrücke Strg + Umschalt + F10 simuliert wurden .
Das RDCOMClient-Paket muss mit dem folgenden Befehl installiert werden:
In der letzten Zeile des obigen Codes wird die Strg-Taste durch '^' und die Umschalttaste durch '+' dargestellt. Alle Erklärungen zu diesen Schlüsseldarstellungen finden Sie hier .
Unmittelbar nach dem Ausführen der letzten Zeile des obigen Codes wird die gesamte R-Sitzung in RStudio gemäß dem Kommentar von @steadyfish zurückgesetzt . Das heißt, es werden alle Daten aus der aktuellen Sitzung entfernt und alle geladenen Pakete in der Sitzung entladen.
Als weitere Alternative kann Emacs ESS (> = 16.10) den minderwertigen R-Prozess neu laden, über inferior-ess-r-reload-hookden C-c C-e C-rstandardmäßig gebunden ist .
Unter Windows müssen Sie die Rprofile.siteDatei ändern . Es befindet sich im etcVerzeichnis von R. Achten Sie auch auf den letzten Teil des Pfads, der bin/x64sich je nach Systemkonfiguration ändern kann. Ich hoffe das wird auch anderen helfen.
In Übereinstimmung mit Martin Morgans Idee der Verwendung .Last(); Dadurch wird R mit denselben Befehlszeilenoptionen wie zuvor aufgerufen neu gestartet:
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)}
Ich denke, man realisiert die beste Verwendung von R, indem man ein aktuelles Arbeitsverzeichnis in Optionen einstellt. Wenn Ihre Arbeitsbereichs- / Sitzungsdatei Sie dann anzeigt oder genug von Ihrer Arbeit enthält (zwischen Projekten), können Sie diese Standardsitzungsdatei nach dem Schließen von R einfach umbenennen, und R / Rstudio startet Sie automatisch in einer neuen Arbeitsbereich / Sitzungsdatei, ohne Ihre aktuelle Arbeit zu stören.
Denken Sie daran, R zu beenden und die aktuelle Sitzungsdatei umzubenennen
Wenn Sie die aktuelle Arbeit nicht speichern möchten, müssen Sie natürlich sicherstellen, dass Sie Objekte zurücksetzen oder Vorgänge daran ausführen, nachdem Sie von Originalobjekten kopiert haben, so wie sie sind. Vertrauen Sie mir, zu wissen, dass Sie immer die alten Arbeitsbereiche laden können, ist eine Versuchung, aber nützlicher als nicht.
Kurz gesagt, R beenden, gibt Ihnen eine Lücke beim Beenden, was bedeutet, dass dieser Arbeitsbereich voll ist. Benennen Sie ihn nach Abschluss des Beenden um und starten Sie R / Rstudio mit einem neuen Arbeitsbereich neu. Sie können ausgewählte Objekte jederzeit in den neuen Arbeitsbereich laden. Im Idealfall sollten sich alle wichtigen Arbeiten in Projektverzeichnissen befinden, aber Sie benötigen immer noch einen Verlauf Ihrer Jobs, auf den Sie zu bestimmten Zeiten zurückgreifen können, und gespeicherte Sitzungen sind irgendwann nützlich, wenn Sie an längeren Projekten arbeiten. Wenn Sie nichts davon brauchen, nurrm(list=ls())
Ich mag auch die RDComClientIdee von @Eduardo Alvin, aber sie wurde eingestellt.
ALTERNATIVE MÖGLICHKEIT
Eine einfache Alternative, um das Gepäck jederzeit in Ihrem Arbeitsbereich loszuwerden, ist die Verwendung save.image
Ich denke, dies ist das, was Sie brauchen, wenn Sie setwd () verwendet haben, bevor Sie refresh aufrufen (obwohl weder diese noch die Originalversion für mich funktionieren, da es R neu startet und sich dann selbst schließt, wird nie ein neues Fenster geöffnet. Wenn jemand einen Kommentar abgeben kann dies bitte tun)
Wenn ich das versuche, wird ein neues Fenster geöffnet, aber das alte Fenster bleibt in einem eingefrorenen Zustand geöffnet, bis das neue Fenster geschlossen wird
Matthew
0
Ich habe die folgende Funktion geschrieben. Merken! Sie können es nur einmal verwenden, dann müssen Sie es nach dem Neustart der R-Sitzung neu laden.
clc <-function(){
rm(list = ls(envir = globalenv()),envir = globalenv())#clear Vars from global enviroment
gc()#grabage colector
cat("\014")#clc
.rs.restartR()#clear session}
rm(list=ls())
löschen, aber das ist nicht das, was Sie meinen, oder?save
Parameterq()
, wie zum Beispiel"r"
, dass Neustarts R ohne den Arbeitsbereich zu speichern. Dann könnte ein Alias fürq("r")
einer neuen Funktion zugewiesen werden, die R.Antworten:
Wenn Sie sich in RStudio befinden: Befehl / Strg + Umschalt + F10
Sie können auch verwenden
quelle
.rs.restartR()
scheint keines dieser Dinge auf meiner Maschine zu tun ..Abhängig davon, wie Sie R starten, versuchen Sie, eine dieser Zeilen in Ihre
.Rprofile
Datei einzufügen:Geben Sie dies dann in die R-Konsole ein:
beendet die aktuelle Sitzung und startet eine neue.
quelle
.Last <- function() system("R")
oder sogar später im Abschaltzyklusreg.finalizer(.GlobalEnv, function(e) system("R"), TRUE)
. Dann kommtq()
immer wieder zurück.Ich fand, dass .rs.restartR () ähnlich funktioniert wie Strg + Umschalt + F10. aber entladen Sie die Pakete nicht
quelle
getAnywhere(".rs.restartR")
scheint es zu seintools:rstudio
. Ich hatte kein Glück, in einer reinen R-Sitzung darauf zuzugreifen..rs.restartR()
entlädt die Pakete nicht, so ist es nicht genau das gleiche wiectrl+shift+f10
Alter Beitrag, aber keine der Antworten funktioniert ganz (für mich verwende ich Windows, habe andere nicht getestet), also werde ich meine Lösung hinzufügen. Einige meiner Begriffe sind hier möglicherweise nicht korrekt, aber dies sollte den Punkt vermitteln:
Die obigen Antworten funktionieren nicht ganz
Die meisten der hier eingereichten Antworten beziehen sich auf die Verwendung
shell
odersystem
funktionieren nicht ganz, da die neue Konsole zwar geöffnet und die ursprüngliche Konsole zum Schließen angewiesen wird, die neue Konsole jedoch im Anwendungskontext der alten Konsole ausgeführt wird. Das bedeutet, dass die ursprüngliche Konsole erst geschlossen werden kann, wenn die neue Konsole geschlossen wird. Einige der oben genannten Benutzer, wie z. B. Hedgedandlevered, berichteten, dass das Schließen der ursprünglichen Konsole das Schließen der neuen Konsole erzwingt. Wenn ich es versuche, wird die neue Konsole geöffnet, aber die alte Konsole bleibt im eingefrorenen Zustand geöffnet, bis die neue Konsole geschlossen wird.Das Grundproblem besteht darin, den Anwendungskontext von der ursprünglichen Konsole auf die neue aufzurufen
shell
odersystem
nicht zu ändern. Daher kann der ursprüngliche Prozess erst beendet werden, wenn die neue Konsole geschlossen wird.Alternative, die für mich funktioniert
Verwenden Sie stattdessen
shell.exec
die Option, die normalerweise zum Öffnen einer Datei in der Standardanwendung basierend auf dem Dateityp verwendet wird. Bei Verwendung auf einer EXE-Datei wird anscheinend die ausführbare Datei ausgeführt. Der wichtige Unterschied besteht jedoch darin, dass das System die Anwendung in einem eigenen Kontext startet. Hier ist der Code, der für mich funktioniert:Sie müssen den Dateipfad so bearbeiten, dass er mit dem
/bin/x64/Rgui.exe
übereinstimmt, mit dem Sie R starten. Sie fügen diese Zeile einfach in Ihre.Rprofile
Datei ein und können sie durch Eingaberestart.R
Ihres R-Codes aufrufen .Der Nachteil gegenüber anderen Methoden ist, dass Sie keine Befehlszeilenargumente wie
--no-save
bei nur übergeben könnenshell
, aber zumindest können Sie so den ursprünglichen R-Prozess schließen.quelle
Nachdem ich nach einer Lösung dafür gesucht hatte, löste ich mein Problem basierend auf dieser Lösung hier mit dem R-Paket RDCOMClient .
Die unten stehende Lösung funktioniert nur in RStudio (Windows), sobald die Tastendrücke Strg + Umschalt + F10 simuliert wurden .
Das RDCOMClient-Paket muss mit dem folgenden Befehl installiert werden:
Der Code zum Simulieren der Tastendrücke in RStudio (Windows 10) lautet:
In der letzten Zeile des obigen Codes wird die Strg-Taste durch '^' und die Umschalttaste durch '+' dargestellt. Alle Erklärungen zu diesen Schlüsseldarstellungen finden Sie hier .
Unmittelbar nach dem Ausführen der letzten Zeile des obigen Codes wird die gesamte R-Sitzung in RStudio gemäß dem Kommentar von @steadyfish zurückgesetzt . Das heißt, es werden alle Daten aus der aktuellen Sitzung entfernt und alle geladenen Pakete in der Sitzung entladen.
quelle
Als weitere Alternative kann Emacs ESS (> = 16.10) den minderwertigen R-Prozess neu laden, über
inferior-ess-r-reload-hook
denC-c C-e C-r
standardmäßig gebunden ist .quelle
Schreiben Sie diese Funktion in Ihr .Rprofile
r()
startet Ihre R-Sitzung neu. Geladene Pakete werden nicht neu geladen. Ihre Umgebung wird nicht gespeichert.Funktioniert für Linux. Keine Ahnung, was unter anderen Betriebssystemen passieren kann
quelle
Ich brauchte die gleiche Funktion für Aktualisierungssitzungen unter Windows und erhielt eine leicht modifizierte Version des Codes:
Unter Windows müssen Sie die
Rprofile.site
Datei ändern . Es befindet sich imetc
Verzeichnis von R. Achten Sie auch auf den letzten Teil des Pfads, derbin/x64
sich je nach Systemkonfiguration ändern kann. Ich hoffe das wird auch anderen helfen.quelle
In Übereinstimmung mit Martin Morgans Idee der Verwendung
.Last()
; Dadurch wird R mit denselben Befehlszeilenoptionen wie zuvor aufgerufen neu gestartet:quelle
startup::restart()
Ich denke, man realisiert die beste Verwendung von R, indem man ein aktuelles Arbeitsverzeichnis in Optionen einstellt. Wenn Ihre Arbeitsbereichs- / Sitzungsdatei Sie dann anzeigt oder genug von Ihrer Arbeit enthält (zwischen Projekten), können Sie diese Standardsitzungsdatei nach dem Schließen von R einfach umbenennen, und R / Rstudio startet Sie automatisch in einer neuen Arbeitsbereich / Sitzungsdatei, ohne Ihre aktuelle Arbeit zu stören.
Denken Sie daran, R zu beenden und die aktuelle Sitzungsdatei umzubenennen
Wenn Sie die aktuelle Arbeit nicht speichern möchten, müssen Sie natürlich sicherstellen, dass Sie Objekte zurücksetzen oder Vorgänge daran ausführen, nachdem Sie von Originalobjekten kopiert haben, so wie sie sind. Vertrauen Sie mir, zu wissen, dass Sie immer die alten Arbeitsbereiche laden können, ist eine Versuchung, aber nützlicher als nicht.
Kurz gesagt, R beenden, gibt Ihnen eine Lücke beim Beenden, was bedeutet, dass dieser Arbeitsbereich voll ist. Benennen Sie ihn nach Abschluss des Beenden um und starten Sie R / Rstudio mit einem neuen Arbeitsbereich neu. Sie können ausgewählte Objekte jederzeit in den neuen Arbeitsbereich laden. Im Idealfall sollten sich alle wichtigen Arbeiten in Projektverzeichnissen befinden, aber Sie benötigen immer noch einen Verlauf Ihrer Jobs, auf den Sie zu bestimmten Zeiten zurückgreifen können, und gespeicherte Sitzungen sind irgendwann nützlich, wenn Sie an längeren Projekten arbeiten. Wenn Sie nichts davon brauchen, nur
rm(list=ls())
Ich mag auch die
RDComClient
Idee von @Eduardo Alvin, aber sie wurde eingestellt.ALTERNATIVE MÖGLICHKEIT
Eine einfache Alternative, um das Gepäck jederzeit in Ihrem Arbeitsbereich loszuwerden, ist die Verwendung
save.image
So können Sie kommen und gehen, wie Sie möchten, und so viele Arbeitsbereiche öffnen, wie Sie benötigen.
quelle
oder mit --save oder --no-save
Ich denke, dies ist das, was Sie brauchen, wenn Sie setwd () verwendet haben, bevor Sie refresh aufrufen (obwohl weder diese noch die Originalversion für mich funktionieren, da es R neu startet und sich dann selbst schließt, wird nie ein neues Fenster geöffnet. Wenn jemand einen Kommentar abgeben kann dies bitte tun)
quelle
Ich habe die folgende Funktion geschrieben. Merken! Sie können es nur einmal verwenden, dann müssen Sie es nach dem Neustart der R-Sitzung neu laden.
Manchmal hilft es auch, ein Paket abzunehmen.
quelle