How to disable "Save workspace image?" prompt in R?
Asked Answered
A

12

119

When I exit the interactive R shell, it displays an annoying prompt every time:

>
>
Save workspace image? [y/n/c]: n

I'm always answering "no" to it, because if I wished to save my work, I'd do that before trying to exit.

How to get rid of the prompt?


Note: see ?save.image

Azide answered 14/2, 2011 at 18:52 Comment(5)
@Spacedman: it's Ctrl+Z in Windows, so don't ever try to "undo" anything. ;-)Rattray
In GNU/Linux, start R --vanillaThaxter
see also this answer using custom q() function in .Rprofie: https://mcmap.net/q/188824/-how-to-make-q-39-yes-39-the-default-quitting-behavior-in-r-using-rprofileFanfare
for what it's worth, RStudio has a preferences hook for thisExergue
fwiw (also), this is the default behavior in the radian R console.Rawden
R
92

You can pass the --no-save command line argument when you start R, or you can override the q function:

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

Put the above code in your .Rprofile so it will be run on startup for every session.

Rattray answered 14/2, 2011 at 19:12 Comment(12)
+1 for .Rprofile, didn't know about it but thats really useful!Psychometry
@Sacha So take a look on #1190259Hunker
After I installed the Defaults package and added the above code to my Rprofile.site file (running R 2.15.1 on Windows 7), I get the following error: "Error in bindingIsLocked(name, as.environment(find(name))) : could not find function 'find'"Gamez
@JohnD.Cook: good point. Only the base package is available at that point, so I'd have to think about how to work around that.Rattray
@JohnD.Cook: See my edit for a solution to your comment. Thanks for pointing out my error.Rattray
Run install.packages("Defaults") in R to install Defaults package first. It worked then on debian stable 6 with R 2.15Abbess
The Defaults package has apparently been removed.Geilich
I'm getting "Error: could not find function "assignInNamespace"". R 3.1.2 on OS XDratted
@Josh Hansen add library(utils) to your .Rprofile to find assignInNamespacePolysyllable
I'm also getting Error in utils::assignInNamespace("q", function(save = "no", status = 0, : locked binding of ‘q’ cannot be changed with R v3.4.2 when I add it to my .Rprofile but do not get this error when I run the command in the terminal interactively.Billman
@O.rka: are you putting the code inside an expression passed to local()? I get the same error when I do that, but it works if I put the code outside the local() call.Rattray
Let me warn you folks, using library(foobar) in ~/.Rprofile has broken me a several builds invoked via ?install.packages (during native C or Fortran compilation, the driver/wrapper scripts in R start to fail). Be ready to comment out, just in case.Azide
P
53

Haven't found the easiest Linux solution yet :)

On ubuntu add the following line to your ~/.bashrc:

alias R='R --no-save'

Every time you start the R console with R, it will be passed the --no-save option.

Pair answered 1/4, 2013 at 9:9 Comment(3)
Or as @Thaxter specified in a comment above use R --vanilla to combine Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ.Hatter
Don't forget to reboot server after updating ~/.bashrcYun
I would use alias r="R --no-save". I don't want to press Shift while typing R. @atsyplenkov: You don't need to reboot. You just need to type source ~/.bash_aliases.Lynd
K
31

You can escape the "Save workspace image?" prompt with a Ctrl+D.

Thus, if you do Ctrl+D twice in interactive R, then you exit R without saving your workspace.

(Tested on Linux and OS X)

Kalvin answered 23/11, 2012 at 18:38 Comment(1)
In R v4.1.3 on Windows, hitting Ctrl+D a second time gets you back to R's prompt.Keratoplasty
I
13

If you are using Rgui, right-click on the icon you use to start R and click on "Properties", and add --no-save to the command that starts R.

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

If you are using a different editor than Rgui, you have to pass --no-save to the R command line when starting R

Inositol answered 14/2, 2011 at 19:12 Comment(1)
Can you please share a screenshot of properties tab?Nystatin
M
10

Overwrite default option for save argument of quit function

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

put this line in .Rprofile

Edit: added q, so there is no prompt no matter which variant is used

Myiasis answered 5/7, 2016 at 14:49 Comment(1)
> formals(quit)$save <- "no" > q() Save workspace image? [y/n/c]:Billman
M
9

If you're using R Studio IDE, you can do this by re-setting the global option.

Go to Tools --> Global Options --> R General (Basic)

  1. Uncheck Restore .RData into your workspace at startup
  2. Save workspace image to .RData on exit -- Select 'Never' See screenshot below

Click on 'Apply' and then 'Ok'

I've written a detailed post on this topic here

In this post, I've addressed 'should we or should we not' save workspace image? I've written detailed answer to the following questions in the comments (make sure you read them all):

  1. How to set never save workspace image?
  2. what does it really mean when it says ‘save workspace image’.
  3. Why you should (almost always) not save workspace image?
  4. When should I save workspace image?
  5. If not saving the workspace image, what should I do? What are the best practices?

In some other posts, I've discussed that might be useful for R users are:

'What is reproducible work?' https://www.linkedin.com/feed/update/urn:li:activity:6789770117715640320

Why should you not use rm(list=ls())? R Best Practices https://www.linkedin.com/feed/update/urn:li:activity:6785805481131683840

Working directory https://www.linkedin.com/posts/drnishaarora_2-set-working-directory-r-studio-activity-6785423883408297984-NAoH

Morette answered 9/4, 2021 at 6:32 Comment(0)
F
8

Get the best of both strategies given by users 1 and 2:

Default to not save by adding the following line to your ~/.bashrc:

alias R='R --no-save'

But give yourself an easy way to save on exit by adding this to ~/.Rprofile:

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

So now q() will quit without saving or prompting but qs() will save and quit (also without prompting)

Flacon answered 16/1, 2014 at 19:16 Comment(1)
I like it as wq <- function() { q(save="yes")} to mirror vi. (also, if you're writing an overwrite function, why not make it send a fixed argument)Daryl
A
6

You could easily add a qq() function to the .Rprofile file

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

I thought that the save option was available with options, but apparently Joshua's answer is best.

Alleviator answered 28/6, 2013 at 22:29 Comment(0)
A
3

How about just avoiding the prompt by typing q('no') instead

Avernus answered 15/2, 2011 at 0:18 Comment(1)
.. which is even more keyboard hits than answering the prompt :-)Kisumu
R
3

If, like me, typing out a whole pair of brackets seems like too much effort to exit the repl you can try this:

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

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

This creates a new class, which causes R to exit when attempting to print said class. The upshot being that if you run exit in the R repl, the whole thing will exit (because it tries to print it).

NB: You can add it to ~/.Rprofile to load at the start of every session.

Rout answered 29/5, 2018 at 16:31 Comment(0)
O
2

You can create an alias for the R command:

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

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

Ophidian answered 28/6, 2013 at 21:23 Comment(0)
C
-3

If you feel adventurous enough, you could also edit the startup section at the end of /usr/bin/R, i.e. add --no-save to the exec calls. However, if you need to save your workspace, remember to save.image().

Crop answered 11/9, 2015 at 8:15 Comment(3)
I do never ever directly edit anything under /usr/bin — and strongly discourage you from doing so. That's the system area, "unauthorized personnel is prohibited".Azide
@Azide If it's my system, I'm authorized :) I think the real reason this isn't a good idea is because it's going to get overwritten by future upgrades.Innervate
@MichaelMior well yes, you're absolutely correct; however: humans mess up. All the time. It's simply a guideline; unless you have a good reason, leave /usr to robots (I mean, the package managers) since they already manage that area. There're ways to not interfere. Otherwise, you're purposefully seeking adventures.Azide

© 2022 - 2024 — McMap. All rights reserved.