【问题标题】:R function called when pressing Ctrl+D按下 Ctrl+D 时调用的 R 函数
【发布时间】:2013-12-13 02:25:09
【问题描述】:

当按下 Ctrl+D 退出 R repl 时会调用什么函数(如果有)?我在几个问题中看到了,例如:

让我相信它正在调用函数 qquit 的代码。

我想覆盖的原因是为了让人讨厌:

保存工作区图像? [是/否/c]:

退出时提示消失。但是,覆盖.Rprofile中的函数如:

quit <- function(...) {
  print(1)
}

同样对于q 不起作用 - 即按 Ctrl-D 实际上并没有打印数字 1,直接进入提示符。

上述链接中提供的解决方案似乎不起作用。使用的 R 版本:

R version 2.15.2 (2012-10-26) -- "Trick or Treat"
Copyright (C) 2012 The R Foundation for Statistical Computing
ISBN 3-900051-07-0
Platform: x86_64-pc-linux-gnu (64-bit)

【问题讨论】:

  • 顺便说一句,是时候升级了。很多 R 包将无法在您运行的侏罗纪版本下运行!
  • @CarlWitthoft 是的,我知道 :) 不幸的是,这是目前 Xubuntu 13.04 存储库中可用的最新版本 - 是的,也需要升级它...... :)
  • 几年过去了,这个问题还有满意的答案吗?

标签: r


【解决方案1】:

Ctrl-D不调用任何函数,是特殊的键盘中断。

尝试按Ctrl-D,然后回复c 取消。如果您按向上箭头来获取最后一个命令,您会发现它不存在。

要覆盖讨厌的Save workspace image? [y/n/c]:,请看答案to this question

总结一下,您有三个选择:

调用R --no-save 而不是R

在交互式 R 会话中加载以下内容(不适用于 .Rprofile):

require(Defaults)
setDefaults(q, save="no")
useDefaults(q)

或将以下内容放入您的.Rprofile

# Set hook to be run when Defaults is attached
setHook(packageEvent("Defaults", "attach"),
  function(...) { setDefaults(q, save="no"); useDefaults(q) })
# add Defaults to the default packages loaded on startup
old <- getOption("defaultPackages");
options(defaultPackages = c(old, "Defaults"))

编辑:

这是我能想到的另一个技巧,因为上述方法不适用于您的情况。这不是 R 解决方案,但可以解决问题吗?

首先,将R 可执行文件(出于本示例的目的,我假设它在/usr/bin/ 中)移动到一个新文件,例如:

sudo mv /usr/bin/R /usr/bin/Rold

现在设置一个新的 bash 脚本为 /usr/bin/R:

#!/bin/bash

/usr/bin/Rold --no-save "$@"

chmod 拥有正确的权限。

【讨论】:

  • 谢谢@Manetheran。 AFAIK,Ctrl+D 不是中断,它只是一个 EOT 字符(en.wikipedia.org/wiki/Control-D)。因此,当遇到 EOT 时,看起来 R 专门要求保存工作区。 .Rprofile 建议(我已经尝试过,请参阅我的问题中的链接)不起作用。唯一可行的选项是使用R --no-save,但是如果外部程序正在运行 R,那不是一个选项。有纯 R 解决方案吗?
  • 我添加了另一个答案。这不是 R 解决方案,而是应该使外部程序调用 R --no-save 的 hack。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2013-02-11
  • 2020-10-30
相关资源
最近更新 更多