制作R功能"听"运行时控制台输入?

时间:2017-05-03 12:56:13

标签: r input

在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,我宁愿不使用它。

1 个答案:

答案 0 :(得分:5)

使用keypress包:

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

按任意键即可突破。我按下&#34; a&#34;经过大约49000次迭代:

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

如果您想在按下&#34; Q&#34;或打印状态时按下&#34; S&#34;可以检查特定键。例如。

文档似乎暗示它应该返回NA而不是&#34; none&#34;但我可能会误读它。