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


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.


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 .


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)


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


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


> 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.


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)


3

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


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.


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'


-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().


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.