如何在R中禁用“保存工作区图像”的提示框?

114

每次退出交互式 R shell 时,都会显示一个令人讨厌的提示:

>
>
保存工作区图像? [y/n/c]: n

我总是回答“no”,因为如果我想要保存我的工作,我会在尝试退出之前进行保存。

如何摆脱这个提示?


注意:请参阅?save.image


7
在Windows中,使用Ctrl+Z来撤消操作,因此不要试图“撤消”任何操作。;-) - Joshua Ulrich
5
在GNU/Linux中,输入命令R --vanilla启动R语言。 - aL3xa
请参考以下答案,在.Rprofile中使用自定义的q()函数:https://dev59.com/5WnWa4cB1Zd3GeqP6Pwp#13043239 - Jeromy Anglim
5
就我所知,RStudio 有一个偏好设置钩子用于此。 - Ben Bolker
2
顺便提一下,这也是 radian R控制台的默认行为。 - Keith Hughitt
12个回答

89

当您启动R时,可以传递--no-save命令行参数,或者您可以覆盖q函数:

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

将上述代码放入您的.Rprofile文件中,这样它将在每个会话启动时运行。

2
@Sacha 请看一下 https://dev59.com/kHM_5IYBdhLWcg3w3nXz - Marek
2
在我安装了Defaults包并将上述代码添加到我的Rprofile.site文件(在Windows 7上运行R 2.15.1)之后,我遇到了以下错误:“Error in bindingIsLocked(name, as.environment(find(name))) : could not find function 'find'”。 - John D. Cook
2
默认包似乎已被移除。 - Praxeolitic
5
@Josh Hansen 将library(utils)添加到您的.Rprofile中,以查找assignInNamespace。 - FXQuantTrader
3
当我将它添加到我的.Rprofile时,我在R v3.4.2中也遇到了Error in utils :: assignInNamespace(“q”,function(save =“no”,status = 0,:locked binding of ‘q’ cannot be changed这个问题,但当我在终端交互式地运行此命令时却没有出现这个错误。 - O.rka
显示剩余7条评论

53

我还没找到最简单的Linux解决方案 :)

在Ubuntu中,请将以下行添加到您的~/.bashrc文件中:

alias R='R --no-save'

每次使用R启动R控制台时,将传递--no-save选项。


4
或者如@aL3xa在上面的评论中指定的那样,使用R --vanilla来组合Combine --no-save, --no-restore, --no-site-file, --no-init-file和--no-environ - Paul Rougieux
更新 ~/.bashrc 后不要忘记重启服务器。 - atsyplenkov
1
我会使用 alias r="R --no-save"。我不想在输入 R 时按下 Shift 键。@atsyplenkov:您无需重新启动计算机。您只需要键入 source ~/.bash_aliases 即可。 - Nav

29
您可以通过按下Ctrl+D来避免 "保存工作区图像?"提示框的出现。
因此,如果您在交互式 R 中按两次Ctrl+D,则会退出 R 而不保存您的工作区。 (在 Linux 和 OS X 上测试通过)

在 Windows 上的 R v4.1.3 中,按下 Ctrl+D 两次可以回到 R 的提示符。 - bers

13

如果您使用的是 Rgui,右键单击用于启动 R 的图标,然后单击“属性”,并在启动 R 的命令中添加 --no-save。

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

如果您使用的编辑器不同于 Rgui,则需要在启动 R 时通过 R 命令行传递 --no-save。


请问您能分享一下属性选项卡的截图吗? - Ashrith Reddy

9

更改quit函数中save参数的默认选项

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

将这行代码放到.Rprofile文件中

编辑:添加了q,这样无论使用哪个变量都不会出现提示。


formals(quit)$save <- "no" q() 是否保存工作区图像?[y/n/c]: - O.rka

8

结合用户12的最佳策略:

通过将以下行添加到您的~/.bashrc文件中,默认为不保存:

alias R='R --no-save'

如果您想要在退出时保存,可以将以下内容添加到~/.Rprofile中:

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

所以现在q()将不保存或提示退出,但qs()将保存并退出(同样不提示)。

我喜欢将它写成 wq <- function() { q(save="yes")} 以反映vi的风格。(另外,如果您正在编写一个覆盖函数,为什么不让它发送一个固定的参数呢?) - Dannid

7

如果您正在使用R Studio IDE,可以通过重置全局选项来完成此操作。

转到 工具 --> 全局选项 --> R 通用(基本)

  1. 取消勾选启动时恢复 .RData到工作区
  2. 退出时将工作区影像保存到.RData -- 选择“永不” 见下面的截图

单击“应用”然后单击“确定”

我在这篇文章中写了一篇详细的文章 here

在这篇文章中,我回答了“我们是否应该保存工作区影像”的问题? 在评论中,我详细回答了以下问题(确保您全部阅读):

  1. 如何设置永不保存工作区影像?
  2. ‘保存工作区影像’的实际含义是什么?
  3. 为什么你几乎总是不应该保存工作区影像?
  4. 什么情况下应该保存工作区影像?
  5. 如果不保存工作区影像,应该怎么做?最佳实践是什么?

在其他一些帖子中,我讨论了对R用户有用的内容:

'什么是可重现的工作?' https://www.linkedin.com/feed/update/urn:li:activity:6789770117715640320

为什么不应该使用rm(list=ls())?R最佳实践 https://www.linkedin.com/feed/update/urn:li:activity:6785805481131683840

工作目录 https://www.linkedin.com/posts/drnishaarora_2-set-working-directory-r-studio-activity-6785423883408297984-NAoH


6

您可以轻松地在.Rprofile文件中添加qq()函数

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

我原以为保存选项与其他选项一起提供,但显然 Joshua 的答案最好。

3
如果和我一样,输入整个括号对似乎太费劲了,想要退出repl,你可以尝试这个方法:
exit <- structure(list(), class = "exit_command")

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

这将创建一个新的类,当尝试打印该类时,会导致R退出。其结果是,如果您在R repl中运行exit,整个程序将退出(因为它尝试打印该类)。

NB:您可以将其添加到~/.Rprofile中,在每个会话开始时加载。


3
如何通过输入q('no')避免提示呢?

27
这句话的意思是“这还比回答问题要敲更多的键盘”。 - Tomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接