Come disattivare "Salva immagine dell'area di lavoro?" prompt in R?


92

Quando esco dalla shell R interattiva, visualizza ogni volta un fastidioso prompt:

>
>
Salvare l'immagine dell'area di lavoro? [y / n / c]: n

Rispondo sempre "no", perché se volessi salvare il mio lavoro, lo farei prima di tentare di uscire.

Come sbarazzarsi del prompt?


Nota: vedere ?save.image


7
@Spacedman: è Ctrl + Z in Windows, quindi non provare mai ad "annullare" nulla. ;-)
Joshua Ulrich

3
In GNU / Linux, iniziaR --vanilla
aL3xa

vedi anche questa risposta utilizzando personalizzato q()funzione nel .Rprofie: stackoverflow.com/a/13043239/180892
Jeromy Anglim

5
per quello che vale, RStudio ha un gancio per le preferenze per questo
Ben Bolker

2
fwiw (anche), questo è il comportamento predefinito nella console radian R.
Keith Hughitt

Risposte:


76

Puoi passare l' --no-saveargomento della riga di comando quando avvii R, oppure puoi sovrascrivere la qfunzione:

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

Metti il ​​codice sopra nel tuo .Rprofile in modo che venga eseguito all'avvio per ogni sessione.


2
@Sacha Quindi dai un'occhiata a stackoverflow.com/questions/1189759/…
Marek

2
Dopo aver installato il pacchetto Defaults e aggiunto il codice sopra al mio file Rprofile.site (eseguendo R 2.15.1 su Windows 7), ottengo il seguente errore: "Errore in bindingIsLocked (name, as.environment (find (name)) ): impossibile trovare la funzione "trova" "
John D. Cook

2
Il pacchetto Default è stato apparentemente rimosso.
Praxeolitic

1
Ricevo "Errore: impossibile trovare la funzione" assignInNamespace "". R 3.1.2 su OS X
Josh Hansen

5
@ Josh Hansen aggiungi la libreria (utils) al tuo .Rprofile per trovare assignInNamespace
FXQuantTrader

31

Non ho ancora trovato la soluzione Linux più semplice :)

Su Ubuntu aggiungi la seguente riga al tuo ~/.bashrc:

alias R='R --no-save'

Ogni volta che avvii la console R con R, verrà passata l' --no-saveopzione.


2
O come @ aL3xa specificato in un commento sopra, usa R --vanillaper combinare Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ.
Paul Rougieux

23

Puoi uscire dal prompt " Salva immagine dell'area di lavoro? " Con un file Ctrl+D.

Pertanto, se esegui Ctrl+Ddue volte in R interattivo, esci da R senza salvare l'area di lavoro.

(Testato su Linux e OS X)


11

Se stai usando Rgui, fai clic con il pulsante destro del mouse sull'icona che usi per avviare R e fai clic su "Proprietà", quindi aggiungi --no-save al comando che avvia R.

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

Se stai usando un editor diverso da Rgui, devi passare --no-save alla riga di comando R all'avvio di R


Puoi condividere uno screenshot della scheda delle proprietà?
Ashrith

8

Sovrascrivi l'opzione predefinita per salvare l' argomento della funzione quit

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

inserisci questa riga in .Rprofile

Modifica: aggiunto q, quindi non vi è alcun prompt indipendentemente dalla variante utilizzata


> formals (quit) $ save <- "no"> q () Salvare l'immagine dell'area di lavoro? [y / n / c]:
O.rka,

5

Potresti facilmente aggiungere una qq()funzione al file .Rprofile

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

Pensavo che l'opzione di salvataggio fosse disponibile con le opzioni, ma a quanto pare la risposta di Joshua è la migliore.


5

Ottieni il meglio da entrambe le strategie fornite da mreq e BondedDust :

Per impostazione predefinita, non salvare aggiungendo la seguente riga a ~ / .bashrc:

alias R='R --no-save'

Ma datti un modo semplice per salvare all'uscita aggiungendo questo a ~ / .Rprofile:

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

Quindi ora si q()chiude senza salvare (o chiedere) ma qs()salverà e uscirà (anche senza chiedere conferma)


3

Che ne dici di evitare il prompt digitando q('no')invece


20
.. che è ancora più pressione sulla tastiera che rispondere al prompt :-)
TMS

3

Se, come me, digitare un intero paio di parentesi sembra uno sforzo eccessivo per uscire dalla sostituzione, puoi provare questo:

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

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

Questo crea una nuova classe, che fa uscire R quando si tenta di stampare detta classe. Il risultato è che se esegui exitin R repl, il tutto uscirà (perché cerca di stamparlo).

NB: Puoi aggiungerlo a ~/.Rprofileper caricarlo all'inizio di ogni sessione.


2

Puoi creare un alias per il comando R:

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

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


-2

Se ti senti abbastanza avventuroso, potresti anche modificare la startupsezione alla fine di /usr/bin/R, cioè aggiungere --no-savealle chiamate di esecuzione. Tuttavia, se devi salvare il tuo spazio di lavoro, ricordati di farlo save.image().


1
Non modifico mai direttamente nulla sotto /usr/bine ti sconsiglio vivamente di farlo. Questa è l'area del sistema, "il personale non autorizzato è vietato".
ulidtko

3
@ulidtko Se è il mio sistema, sono autorizzato :) Penso che il vero motivo per cui questa non è una buona idea è perché verrà sovrascritto da futuri aggiornamenti.
Michael Mior

@MichaelMior beh sì, hai assolutamente ragione; tuttavia: gli umani fanno casino. Tutto il tempo. È semplicemente una linea guida; a meno che tu non abbia una buona ragione, lascia /usrai robot (intendo, i gestori di pacchetti) poiché gestiscono già quell'area. Ci sono modi per non interferire. Altrimenti, stai intenzionalmente cercando avventure.
ulidtko
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.