2013-12-13 38 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'。 –