Wie deaktiviere ich "Arbeitsbereichsbild speichern"? Eingabeaufforderung in R?

91

Wenn ich die interaktive R-Shell verlasse, wird jedes Mal eine nervige Eingabeaufforderung angezeigt:

>
>
Arbeitsbereichsbild speichern? [j / n / c]: n

Ich antworte immer mit "Nein", denn wenn ich meine Arbeit retten wollte, würde ich das tun, bevor ich versuche zu beenden.

Wie werde ich die Eingabeaufforderung los?


Hinweis: siehe ?save.image

ulidtko
quelle
7
@Spacedman: Es ist Strg + Z in Windows, also versuchen Sie niemals, etwas rückgängig zu machen. ;-)
Joshua Ulrich
3
Starten R --vanilla
Sie
Siehe auch diese Antwort mit benutzerdefinierten q()Funktion in .Rprofie: stackoverflow.com/a/13043239/180892
Jeromy Anglim
5
Für das, was es wert ist, hat RStudio einen Präferenzhaken dafür
Ben Bolker
1
fwiw (auch), dies ist das Standardverhalten in der Radian R-Konsole.
Keith Hughitt

Antworten:

76

Sie können das --no-saveBefehlszeilenargument übergeben, wenn Sie R starten, oder Sie können die qFunktion überschreiben :

utils::assignInNamespace(
  "q", 
  function(save = "no", status = 0, runLast = TRUE) 
  {
    .Internal(quit(save, status, runLast))
  }, 
  "base"
)

Fügen Sie den obigen Code in Ihr .Rprofile ein, damit er beim Start für jede Sitzung ausgeführt wird.

Joshua Ulrich
quelle
2
@Sacha Also werfen Sie einen Blick auf stackoverflow.com/questions/1189759/…
Marek
2
Nachdem ich das Defaults-Paket installiert und den obigen Code zu meiner Rprofile.site-Datei hinzugefügt habe (unter Windows 7 wird R 2.15.1 ausgeführt), wird folgende Fehlermeldung angezeigt: "Fehler beim Binden von IsLocked (name, as.environment (find (name))" ): Funktion 'find' konnte nicht gefunden werden "
John D. Cook
2
Das Standardpaket wurde anscheinend entfernt.
Praxeolitisch
1
Ich erhalte die Meldung "Fehler: Funktion" assignInNamespace "konnte nicht gefunden werden. R 3.1.2 unter OS X
Josh Hansen
5
@ Josh Hansen füge Bibliothek (Utils) zu deinem .Rprofile hinzu, um assignInNamespace
FXQuantTrader
30

Ich habe noch nicht die einfachste Linux-Lösung gefunden :)

Fügen Sie auf Ubuntu die folgende Zeile zu Ihrem hinzu ~/.bashrc:

alias R='R --no-save'

Jedes Mal, wenn Sie die R-Konsole mit starten R, wird die --no-saveOption übergeben.

mreq
quelle
2
Oder wie @ aL3xa in einem Kommentar oben angegeben, R --vanillazum Kombinieren verwenden Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ.
Paul Rougieux
22

Sie können die Eingabeaufforderung " Arbeitsbereichsbild speichern? " Mit a umgehen Ctrl+D.

Also, wenn Sie das tun Ctrl+D zweimal in interaktivem R arbeiten, beenden Sie R, ohne Ihren Arbeitsbereich zu speichern.

(Getestet unter Linux und OS X)

Hugo Ideler
quelle
11

Wenn Sie Rgui verwenden, klicken Sie mit der rechten Maustaste auf das Symbol, mit dem Sie R starten, und klicken Sie auf "Eigenschaften". Fügen Sie dem Befehl, der R startet, --no-save hinzu.

(von http://tolstoy.newcastle.edu.au/R/help/05/03/1115.html )

Wenn Sie einen anderen Editor als Rgui verwenden, müssen Sie --no-save beim Starten von R an die R-Befehlszeile übergeben

Andrie
quelle
Können Sie bitte einen Screenshot der Registerkarte "Eigenschaften" freigeben?
Ashrith
8

Standardoption zum Speichern des Arguments der Beendigungsfunktion überschreiben

formals(quit)$save <- formals(q)$save <- "no"

Setzen Sie diese Zeile in .Rprofile

Bearbeiten: hinzugefügt q, so dass es keine Eingabeaufforderung gibt, egal welche Variante verwendet wird

Pafnucy
quelle
> formale (beenden) $ save <- "no"> q () Arbeitsbereichsbild speichern? [j / n / c]:
O.rka
5

Sie können qq()der .Rprofile-Datei problemlos eine Funktion hinzufügen

 qq <- function(save="no") { q(save=save)}

Ich dachte, dass die Speicheroption mit Optionen verfügbar ist, aber anscheinend ist Joshuas Antwort die beste.

IRTFM
quelle
5

Holen Sie das Beste aus beiden Strategien von mreq und BondedDust heraus :

Standardmäßig wird nicht gespeichert, indem die folgende Zeile zu Ihrem ~ / .bashrc hinzugefügt wird:

alias R='R --no-save'

Aber geben Sie sich eine einfache Möglichkeit, beim Beenden zu sparen, indem Sie dies zu ~ / .Rprofile hinzufügen:

qs <- function(save="yes") { q(save=save)}

Beendet nun also q()ohne Speichern (oder Aufforderung), qs()wird aber gespeichert und beendet (auch ohne Aufforderung)

fliegender Finger
quelle
3

Wie wäre es, wenn Sie die Eingabeaufforderung vermeiden, indem Sie q('no')stattdessen eingeben

Stedy
quelle
20
.. das ist noch mehr Tastaturtreffer als die Antwort auf die Aufforderung :-)
TMS
3

Wenn es wie ich zu aufwendig erscheint, ein ganzes Paar Klammern auszutippen, um die Antwort zu beenden, können Sie Folgendes versuchen:

exit <- structure(list(), class = "exit_command")

print.exit_command <- function(...) {
  q("no")  # exit without saving
}

Dadurch wird eine neue Klasse erstellt, die bewirkt, dass R beendet wird, wenn versucht wird, diese Klasse zu drucken. Das Ergebnis ist, dass, wenn Sie exitin der R-Repl ausführen, das Ganze beendet wird (weil es versucht, es zu drucken).

NB: Sie können es hinzufügen, um es zu ~/.RprofileBeginn jeder Sitzung zu laden.

Snakeoilsales
quelle
2

Sie können einen Alias ​​für den Befehl R erstellen:

mit bash :alias R='R --no-save'

mit csh: alias R 'R --no-save'

Wizmer
quelle
-2

Wenn Sie sich abenteuerlustig genug fühlen, können Sie auch den startupAbschnitt am Ende von bearbeiten /usr/bin/R, dh --no-savezu den Exec-Aufrufen hinzufügen . Wenn Sie jedoch Ihren Arbeitsbereich speichern müssen, denken Sie daran save.image().

Bijoy J.
quelle
1
Ich bearbeite niemals direkt etwas unter /usr/bin- und rate Ihnen dringend davon ab. Das ist der Systembereich, "unbefugtes Personal ist verboten".
Ulidtko
3
@ulidtko Wenn es mein System ist, bin ich autorisiert :) Ich denke, der wahre Grund, warum dies keine gute Idee ist, ist, dass es durch zukünftige Upgrades überschrieben wird.
Michael Mior
@ MichaelMior na ja, du bist absolut richtig; jedoch: Menschen vermasseln. Die ganze Zeit. Es ist einfach eine Richtlinie; Wenn Sie keinen guten Grund haben, überlassen Sie /usres den Robotern (ich meine den Paketmanagern), da sie diesen Bereich bereits verwalten. Es gibt Möglichkeiten, sich nicht einzumischen. Ansonsten suchst du gezielt nach Abenteuern.
Ulidtko