2017-05-03 72 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,而不是“无”但我可能是误解了。