2013-12-13 35 views
2

按Ctrl + D退出R repl时会调用什么函数(如果有)?我在几个问题看见,如:按Ctrl + D时调用的R函数

的代码,使我相信它调用两个函数qquit

我要重写的原因是为了让讨厌的:

保存工作区的形象? [y/n/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) 
+0

顺便提一下,你已经升级了。许多R软件包不能在你运行的侏罗纪版本下运行! –

+0

@CarlWitthoft是的,我知道:)不幸的是,这是目前Xubuntu 13.04版本中的最新版本 - 是的,需要升级... :) –

+0

几年之后,还有没有任何满意的答案题? – nsheff

回答

4

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

尝试按Ctrl-D,然后回答c取消。如果您按向上箭头以获取最后一个命令,您将看到它不在那里。

要覆盖讨厌Save workspace image? [y/n/c]:,一看便知to this question

总之,你有三种选择:

调用R --no-save代替R

加载在交互式R对话以下(韩元't工作从.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 "[email protected]" 

chmod它有正确的权限。

+0

谢谢@Manetheran。 AFAIK,Ctrl + D不是中断,它只是一个EOT字符(http://en.wikipedia.org/wiki/Control-D)。所以看起来R在遇到EOT时特别要求工作区保存。 .Rprofile建议(我已经尝试了,请参阅我的问题中的链接)不起作用。唯一可行的选择是使用'R --no-save',但是如果外部程序运行R,那不是一个选项。有没有一个纯粹的R解决方案呢? –

+0

我已经添加了另一个答案。这不是一个R解决方案,但是应该使外部程序调用'R --no-save'。 –