【问题标题】:How to disable "Save workspace image?" prompt in R?如何禁用“保存工作区图像?”在 R 中提示?
【发布时间】:2011-06-27 03:14:27
【问题描述】:

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

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

我总是回答“不”,因为如果我想保存我的工作,我会在尝试退出之前 这样做。

如何摆脱提示?


注意:见?save.image

【问题讨论】:

  • @Spacedman:在 Windows 中是 Ctrl+Z,所以永远不要试图“撤消”任何东西。 ;-)
  • 在 GNU/Linux 中,启动 R --vanilla
  • 在 .Rprofie 中使用自定义 q() 函数参见此答案:stackoverflow.com/a/13043239/180892
  • 对于它的价值,RStudio 有一个偏好挂钩
  • fwiw(也),这是radian R 控制台中的默认行为。

标签: r read-eval-print-loop


【解决方案1】:

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

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

将上面的代码放在你的 .Rprofile 中,这样它就会在每个会话的启动时运行。

【讨论】:

  • 安装 Defaults 包并将上述代码添加到我的 Rprofile.site 文件(在 Windows 7 上运行 R 2.15.1)后,我收到以下错误:“绑定IsLocked 中的错误(名称,如.environment(find(name))) : 找不到函数'find'"
  • 默认包显然已被删除。
  • 我收到“错误:找不到函数“assignInNamespace””。 OS X 上的 R 3.1.2
  • @Josh Hansen 将 library(utils) 添加到您的 .Rprofile 以查找 assignInNamespace
【解决方案2】:

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

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

alias R='R --no-save'

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

【讨论】:

  • 或者如上面评论中指定的@aL3xa 使用R --vanilla 组合Combine --no-save, --no-restore, --no-site-file, --no-init-file and --no-environ
【解决方案3】:

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

因此,如果您在交互式 R 中执行两次 Ctrl+D,那么您将退出 R 而不保存您的工作区。

(在 Linux 和 OS X 上测试)

【讨论】:

    【解决方案4】:

    如果你使用的是Rgui,右键点击你用来启动R的图标,点击“属性”,在启动R的命令中添加--no-save。

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

    如果您使用的编辑器与 Rgui 不同,则必须在启动 R 时将 --no-save 传递给 R 命令行

    【讨论】:

    • 你能分享一下属性标签的截图吗?
    【解决方案5】:

    覆盖 quit 函数的 save 参数的默认选项

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

    将此行放入 .Rprofile

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

    【讨论】:

    • >formals(quit)$save q() 保存工作区图像? [是/否/c]:
    【解决方案6】:

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

    默认不保存,在 ~/.bashrc 中添加以下行:

    alias R='R --no-save'
    

    但是通过将其添加到 ~/.Rprofile 给自己一个简单的方法来保存退出:

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

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

    【讨论】:

    • 我喜欢 wq &lt;- function() { q(save="yes")} 镜像 vi。 (另外,如果你正在编写一个覆盖函数,为什么不让它发送一个固定的参数)
    【解决方案7】:

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

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

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

    【讨论】:

      【解决方案8】:

      直接输入q('no') 来避免提示怎么样

      【讨论】:

      • .. 键盘敲击次数比回答提示符还要多 :-)
      【解决方案9】:

      如果像我一样,输入一整对括号似乎要退出 repl 太费力了,你可以试试这个:

      exit <- structure(list(), class = "exit_command")
      
      print.exit_command <- function(...) {
        q("no")  # exit without saving
      }
      

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

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

      【讨论】:

        【解决方案10】:

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

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

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

        【讨论】:

          【解决方案11】:

          如果您使用的是 R Studio IDE,您可以通过重新设置全局选项来做到这一点。

          转到工具 --> 全局选项 --> R 常规(基本)

          1. 取消选中启动时将 .RData 还原到您的工作区
          2. 退出时将工作区图像保存到 .RData -- 选择“从不”

          点击“应用”,然后点击“确定”

          我已经写了一篇关于这个主题的详细帖子here

          在这篇文章中,我谈到了“我们应该还是不应该”保存工作区图像? 我已经在 cmets 中写了以下问题的详细答案(请确保您阅读了所有内容):

          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

          【讨论】:

            【解决方案12】:

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

            【讨论】:

            • 我确实从不直接编辑 /usr/bin 下的任何内容 — 强烈建议您不要这样做。那就是系统区域,“禁止未经授权的人员”。
            • @ulidtko 如果这是我的系统,我已获得授权 :) 我认为这不是一个好主意的真正原因是它会被未来的升级覆盖。
            • @MichaelMior 嗯,是的,你说的完全正确;然而:人类搞砸了。每时每刻。这只是一个指导方针;除非你有充分的理由,否则将/usr 留给机器人(我的意思是包管理器),因为他们已经管理了该区域。有办法不干涉。否则,你就是在有目的地寻求冒险。
            猜你喜欢
            • 1970-01-01
            • 2018-07-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2014-05-12
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多