Comment désactiver "Enregistrer l'image de l'espace de travail?" invite dans R?

92

Lorsque je quitte le shell R interactif, il affiche une invite ennuyeuse à chaque fois:

>
>
Enregistrer l'image de l'espace de travail? [o / n / c]: n

Je réponds toujours "non" à cela, car si je voulais sauvegarder mon travail, je le ferais avant d' essayer de quitter.

Comment se débarrasser de l'invite?


Remarque: voir ?save.image

ulidtko
la source
7
@Spacedman: c'est Ctrl + Z sous Windows, donc n'essayez jamais de "défaire" quoi que ce soit. ;-)
Joshua Ulrich
3
Dans GNU / Linux, démarrezR --vanilla
aL3xa
voir aussi cette réponse en utilisant une q()fonction personnalisée dans .Rprofie: stackoverflow.com/a/13043239/180892
Jeromy Anglim
5
pour ce que ça vaut, RStudio a un crochet de préférences pour cela
Ben Bolker
2
fwiw (aussi), c'est le comportement par défaut dans la console radian R.
Keith Hughitt

Réponses:

76

Vous pouvez passer l' --no-saveargument de ligne de commande lorsque vous démarrez R, ou vous pouvez remplacer la qfonction:

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

Mettez le code ci-dessus dans votre .Rprofile afin qu'il soit exécuté au démarrage pour chaque session.

Joshua Ulrich
la source
2
@Sacha Alors jetez un oeil sur stackoverflow.com/questions/1189759/…
Marek
2
Après avoir installé le package Defaults et ajouté le code ci-dessus à mon fichier Rprofile.site (exécutant R 2.15.1 sous Windows 7), j'obtiens l'erreur suivante: "Erreur dans bindingIsLocked (name, as.environment (find (name)) ): impossible de trouver la fonction 'find' "
John D. Cook
2
Le package Defaults a apparemment été supprimé.
Praxeolitic
1
J'obtiens "Erreur: impossible de trouver la fonction" assignInNamespace "". R 3.1.2 sur OS X
Josh Hansen
5
@Josh Hansen ajoutez une bibliothèque (utils) à votre .Rprofile pour trouver assignInNamespace
FXQuantTrader
31

Je n'ai pas encore trouvé la solution Linux la plus simple :)

Sur ubuntu, ajoutez la ligne suivante à votre ~/.bashrc:

alias R='R --no-save'

Chaque fois que vous démarrez la console R avec R, l' --no-saveoption sera passée .

mreq
la source
2
Ou comme @ aL3xa spécifié dans un commentaire ci-dessus, utilisez R --vanillapour combiner Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ.
Paul Rougieux
23

Vous pouvez échapper à l' invite " Enregistrer l'image de l'espace de travail? " Avec un Ctrl+D.

Ainsi, si vous faites Ctrl+Ddeux fois en R interactif, alors vous quittez R sans enregistrer votre espace de travail.

(Testé sous Linux et OS X)

Hugo Ideler
la source
11

Si vous utilisez Rgui, faites un clic droit sur l'icône que vous utilisez pour démarrer R et cliquez sur "Propriétés", et ajoutez --no-save à la commande qui démarre R.

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

Si vous utilisez un éditeur différent de Rgui, vous devez passer --no-save à la ligne de commande R au démarrage de R

Andrie
la source
Pouvez-vous s'il vous plaît partager une capture d'écran de l'onglet Propriétés?
Ashrith
8

Option d'écrasement par défaut pour l' argument de sauvegarde de la fonction de sortie

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

mettre cette ligne dans .Rprofile

Edit: ajouté q, donc il n'y a pas d'invite quelle que soit la variante utilisée

Pafnucy
la source
> formals (quit) $ save <- "no"> q () Enregistrer l'image de l'espace de travail? [y / n / c]:
O.rka
5

Vous pouvez facilement ajouter une qq()fonction au fichier .Rprofile

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

Je pensais que l'option de sauvegarde était disponible avec des options, mais apparemment la réponse de Joshua est la meilleure.

IRTFM
la source
5

Tirez le meilleur parti des deux stratégies proposées par mreq et BondedDust :

Par défaut pour ne pas enregistrer en ajoutant la ligne suivante à votre ~ / .bashrc:

alias R='R --no-save'

Mais donnez-vous un moyen facile d'enregistrer à la sortie en ajoutant ceci à ~ / .Rprofile:

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

Alors maintenant q()quitte sans enregistrer (ou demander) mais qs()enregistre et quitte (également sans invite)

doigt volant
la source
3

Que diriez-vous simplement d'éviter l'invite en tapant à la q('no')place

Stedy
la source
20
.. ce qui est encore plus de coups de clavier que de répondre à l'invite :-)
TMS
3

Si, comme moi, taper toute une paire de crochets semble trop d'effort pour quitter la répl, vous pouvez essayer ceci:

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

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

Cela crée une nouvelle classe, ce qui entraîne la fermeture de R lors de la tentative d'impression de ladite classe. Le résultat étant que si vous exécutez exitdans le R repl, le tout se terminera (car il essaie de l'imprimer).

NB: Vous pouvez l'ajouter à ~/.Rprofilepour charger au début de chaque session.

serpent
la source
2

Vous pouvez créer un alias pour la commande R:

en utilisant bash :alias R='R --no-save'

en utilisant csh: alias R 'R --no-save'

wizmer
la source
-2

Si vous vous sentez assez aventureux, vous pouvez également éditer la startupsection à la fin de /usr/bin/R, c'est- --no-saveà- dire ajouter aux appels exécutables. Cependant, si vous devez enregistrer votre espace de travail, n'oubliez pas de le faire save.image().

Bijoy J
la source
1
Je ne modifie jamais directement quoi que ce soit sous /usr/bin- et vous déconseille fortement de le faire. C'est la zone du système, "le personnel non autorisé est interdit".
ulidtko
3
@ulidtko Si c'est mon système, je suis autorisé :) Je pense que la vraie raison pour laquelle ce n'est pas une bonne idée est qu'il va être écrasé par les futures mises à jour.
Michael Mior
@MichaelMior eh bien oui, vous avez tout à fait raison; cependant: les humains gâchent. Tout le temps. C'est simplement une ligne directrice; sauf si vous avez une bonne raison, laissez /usraux robots (je veux dire, les gestionnaires de paquets) car ils gèrent déjà cette zone. Il existe des moyens de ne pas interférer. Sinon, vous cherchez délibérément des aventures.
ulidtko du