2017-05-03 69 views
2

在R,是可以從控制檯將信號發送到正在運行的功能,使得該功能可以做什麼?例如,退出和返回當前值?在運行時讓R功能「監聽」控制檯輸入?

下面是一個例子:以下自舉功能的標準誤差的迴歸係數的。函數的詳細程度顯示了方差是如何演變的。它將漸近於其下限。我希望能夠發送INTERUPTION SIGNAL(以某種方式),它將停止while循環並使函數完全退出。

example <- function(y, x){ 
    bvec <- c() 
    while(TRUE){ 
    s <- sample(1:1000, replace = T) 
    b <- lm(y[s]~x[s])$coef[2] 
    bvec <- append(bvec, b) 
    Sys.sleep(.1) 
    print(var(bvec)) 
    if(INTERUPTION_SIGNAL){ 
     return(var(bvec)) 
    } 
    } 
} 
x <- rnorm(1000) 
y <- x+rnorm(1000) 

在虛擬的例子,我可能只是在全球運行。在實際情況下這是不切實際的。在每次迭代之後寫入磁盤也是可能的,但這會很慢。我想我可以在冗長之上添加以下代碼行:tempout <<- var(bvec),這可以通過將輸出放在全局中來工作。但是這感覺有點笨拙,並且都依賴^C,我寧願不使用它。

回答

5

使用keypress包:

library(keypress) 
x=0 
while(TRUE){ 
x = x + 1 
k = keypress(block=FALSE) 
if(k!="none")break 
} 

按任意鍵打出來。我按下「A」後約49000迭代:

> k 
[1] "a" 
> x 
[1] 49263 

你可以檢查一個特定的鍵,如果你想在按「Q」,或打印狀態上按下「S」,例如打破。

文檔似乎暗示它應該返回NA,而不是「無」但我可能是誤解了。