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


92

当我退出交互式R shell时,每次都会显示一个烦人的提示:

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

我总是对它回答“否”,因为如果我希望保存自己的工作,那么退出之前会先这样做。

如何摆脱提示?


注意:见 ?save.image


7
@Spacedman:在Windows中为Ctrl + Z,因此请勿尝试“撤消”任何操作。;-)
约书亚·乌尔里希

3
在GNU / Linux中,开始R --vanilla
aL3xa 2011年

另请参阅q()在.Rprofie中使用自定义函数的此答案:stackoverflow.com/a/13043239/180892
Jeromy Anglim 2012年

5
对于它的价值,RStudio对此具有偏好挂钩
Ben Bolker 2012年

2
fwiw(也是),这是弧度 R控制台中的默认行为。
基思·休吉特

Answers:


76

您可以--no-save在启动R时传递命令行参数,也可以覆盖该q函数:

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

将上面的代码放入您的.Rprofile中,以便它将在每次会话启动时运行。


2
@Sacha因此,采取一看stackoverflow.com/questions/1189759/...
马立克

2
安装默认程序包并将以上代码添加到我的Rprofile.site文件(在Windows 7上运行R 2.15.1)之后,出现以下错误:“ bindingIsLocked(name,as.environment(find(name))错误):找不到函数“ find””
约翰·D·库克

2
Defaults软件包显然已被删除。
Praxeolitic

1
我收到“错误:找不到函数“ assignInNamespace””。OS X上的R 3.1.2
Josh Hansen

5
@Josh Hansen将库(utils)添加到您的.Rprofile中以找到assignInNamespace
FXQuantTrader 2015年

31

尚未找到最简单的Linux解决方案:)

在ubuntu上,将以下行添加到您的~/.bashrc

alias R='R --no-save'

每次使用来启动R控制台时R,都会通过该--no-save选项。


2
或如以上注释中指定的@ aL3xa R --vanilla用于合并Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ
Paul Rougieux

23

您可以使用来转义“ 保存工作区图像? ”提示Ctrl+D

因此,如果您Ctrl+D在交互式R中执行两次,则在不保存工作空间的情况下退出R。

(在Linux和OS X上测试)



8

覆盖退出函数的save参数的默认选项

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

将此行放在.Rprofile中

编辑:添加了q,所以无论使用哪种变体都没有提示


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

5

您可以轻松地qq()向.Rprofile文件添加功能

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

我以为保存选项与选项一起提供,但是显然约书亚的答案是最好的。


5

充分利用mreqBondedDust给出的两种策略:

通过将以下行添加到〜/ .bashrc中,默认不保存:

alias R='R --no-save'

但是,通过将其添加到〜/ .Rprofile中,为自己提供一种退出退出的简单方法:

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

因此,现在q()退出时不保存(或不提示),但qs()将保存并退出(也不提示)


3

如何只避免提示下键入q('no')代替


20
..比按提示回答键盘击键还要多:-)
TMS

3

如果像我一样输入整个方括号似乎太费劲了,您可以尝试以下操作:

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

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

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

注意:您可以将其添加到~/.Rprofile每个会话开始时加载。


2

您可以为R命令创建别名:

使用bashalias R='R --no-save'

使用csh: alias R 'R --no-save'


-2

如果您有足够的冒险精神,还可以startup在末尾编辑该部分,即将其/usr/bin/R添加--no-save到exec调用中。但是,如果需要保存工作区,请记住save.image()


1
从不直接编辑任何内容/usr/bin,因此强烈建议您不要这样做。这是系统区域,“禁止未经授权的人员”。
ulidtko 2015年

3
@ulidtko如果这是我的系统,则已获得授权:)我认为这不是一个好主意的真正原因是,它将在以后的升级中被覆盖。
Michael Mior

@MichaelMior好吧,你是绝对正确的;但是:人类搞砸了。每时每刻。这只是一个准则;除非您有充分的理由,否则请/usr交给机器人(我是包装经理),因为他们已经在该领域进行管理。有不干扰的方法。否则,您将有目的地寻求冒险。
ulidtko
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.