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.