Jak wyłączyć opcję „Zapisać obraz obszaru roboczego?” monit w R?

95

Kiedy wychodzę z interaktywnej powłoki R, za każdym razem wyświetla irytujący komunikat:

>
>
Zapisać obraz obszaru roboczego? [t / n / c]: n

Zawsze odpowiadam „nie”, bo gdybym chciał ocalić swoją pracę, zrobiłbym to przed próbą wyjścia.

Jak pozbyć się monitu?


Uwaga: patrz ?save.image

ulidtko
źródło
7
@Spacedman: w Windows to Ctrl + Z, więc nigdy nie próbuj niczego „cofać”. ;-)
Joshua Ulrich
4
W systemie GNU / Linux startR --vanilla
aL3xa
zobacz także tę odpowiedź, używając q()funkcji niestandardowej w .Rprofie: stackoverflow.com/a/13043239/180892
Jeromy Anglim
5
co jest warte, RStudio ma do tego haczyk preferencji
Ben Bolker,
2
fwiw (również), jest to domyślne zachowanie w konsoli Radian R.
Keith Hughitt

Odpowiedzi:

76

Możesz przekazać --no-saveargument wiersza poleceń podczas uruchamiania R lub możesz przesłonić qfunkcję:

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

Umieść powyższy kod w swoim .Rprofile, aby był uruchamiany przy starcie dla każdej sesji.

Joshua Ulrich
źródło
2
@Sacha Więc spójrz na stackoverflow.com/questions/1189759/ ...
Marek
2
Po zainstalowaniu pakietu Defaults i dodaniu powyższego kodu do mojego pliku Rprofile.site (z wersją R 2.15.1 w systemie Windows 7) pojawia się następujący błąd: „Błąd w bindingIsLocked (name, as.environment (find (name)) ): nie można znaleźć funkcji „znajdź” ”
John D. Cook
2
Pakiet Defaults został najwyraźniej usunięty.
Praxeolitic
1
Otrzymuję komunikat „Błąd: nie można znaleźć funkcji„ assignInNamespace ””. R 3.1.2 na OS X
Josh Hansen
5
@Josh Hansen dodaj bibliotekę (narzędzia) do swojego .Rprofile, aby znaleźć assignInNamespace
FXQuantTrader
35

Nie znalazłem jeszcze najłatwiejszego rozwiązania dla Linuksa :)

Na Ubuntu dodaj następujący wiersz do swojego ~/.bashrc:

alias R='R --no-save'

Za każdym razem, gdy uruchamiasz konsolę R z R, zostanie przekazana --no-saveopcja.

mreq
źródło
3
Lub jako @ aL3xa określone w komentarzu powyżej użyj R --vanillado łączenia Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ.
Paul Rougieux
25

Możesz pominąć monit „ Zapisać obraz obszaru roboczego? ” Za pomocąCtrl+D .

Tak więc, jeśli zrobisz Ctrl+Ddwa razy w interaktywnym R, wyjdziesz z R bez zapisywania obszaru roboczego.

(Testowane w systemie Linux i OS X)

Hugo Ideler
źródło
11

Jeśli używasz Rgui, kliknij prawym przyciskiem myszy ikonę, której używasz do uruchomienia R, kliknij „Właściwości” i dodaj --no-save do polecenia uruchamiającego R.

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

Jeśli używasz innego edytora niż Rgui, musisz przekazać --no-save do wiersza poleceń R podczas uruchamiania R

Andrie
źródło
Czy możesz udostępnić zrzut ekranu zakładki właściwości?
Ashrith
8

Zastąp domyślną opcję zapisu argumentu wyjścia z funkcji

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

umieść tę linię w .Rprofile

Edycja: dodana q, więc nie ma monitu bez względu na używany wariant

Pafnucy
źródło
> formals (quit) $ save <- "no"> q () Zapisać obraz obszaru roboczego? [t / n / c]:
O.rka
6

Wykorzystaj to, co najlepsze z obu strategii oferowanych przez mreq i BondedDust :

Domyślnie nie zapisuj, dodając następujący wiersz do swojego ~ / .bashrc:

alias R='R --no-save'

Ale daj sobie łatwy sposób na oszczędzanie przy zamykaniu, dodając to do ~ / .Rprofile:

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

Więc teraz q()kończy bez zapisywania (lub monitowania), ale qs()zapisze i wyjdzie (również bez pytania)

latający palcem
źródło
Podoba mi wq <- function() { q(save="yes")}się lustro vi. (również, jeśli piszesz funkcję nadpisującą, dlaczego nie zmusić jej do wysyłania stałego argumentu)
Dannid
5

Możesz łatwo dodać qq()funkcję do pliku .Rprofile

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

Myślałem, że opcja zapisywania jest dostępna z opcjami, ale najwyraźniej odpowiedź Joshuy jest najlepsza.

IRTFM
źródło
3

Jeśli, tak jak ja, wpisanie całej pary nawiasów wydaje się zbyt dużym wysiłkiem, aby wyjść z odpowiedzi, możesz spróbować tego:

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

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

Tworzy to nową klasę, co powoduje, że R kończy pracę podczas próby wydrukowania tej klasy. Skutek jest taki, że jeśli uruchomisz exitR repl, całość zakończy się (ponieważ próbuje ją wydrukować).

NB: Możesz dodać go do, ~/.Rprofileaby załadować na początku każdej sesji.

snakeoilsales
źródło
2

Co powiesz na uniknięcie monitu, wpisując q('no')zamiast tego

Stedy
źródło
21
.. co oznacza jeszcze więcej uderzeń klawiatury niż odpowiadanie na monit :-)
TMS
2

Możesz utworzyć alias dla polecenia R:

używając bash :alias R='R --no-save'

używając csh: alias R 'R --no-save'

czarodziej
źródło
-3

Jeśli czujesz się na siłach, możesz także edytować startupsekcję na końcu /usr/bin/R, tj. Dodać --no-savedo wywołań exec. Jeśli jednak chcesz zapisać swój obszar roboczy, pamiętaj o tym save.image().

Bijoy J
źródło
1
Ja nigdy bezpośrednio edytować wszystko pod /usr/bin- i mocno zniechęcić Cię od tego. To jest obszar systemu, „nieautoryzowany personel jest zabroniony”.
ulidtko
3
@ulidtko Jeśli to mój system, mam autoryzację :) Myślę, że prawdziwym powodem, dla którego to nie jest dobry pomysł, jest to, że zostanie on nadpisany przez przyszłe aktualizacje.
Michael Mior
@MichaelMior no tak, masz całkowitą rację; jednak: ludzie psują. Cały czas. To po prostu wskazówka; jeśli nie masz dobrego powodu, zostaw /usrrobotom (mam na myśli menedżerów pakietów), ponieważ one już zarządzają tym obszarem. Istnieją sposoby, aby nie przeszkadzać. W przeciwnym razie celowo szukasz przygód.
ulidtko