r - 在运行时制作 R 函数 "listen"用于控制台输入?

标签 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 ,我不想使用它。

最佳答案

使用keypress包:

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

按任意键即可逃脱。我在大约 49000 次迭代后按下了“a”:

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

如果您想在按“Q”时中断,或者在按“S”时打印状态,您可以检查特定的键。

文档似乎暗示它应该返回 NA 而不是“none”,但我可能误读了它。

关于r - 在运行时制作 R 函数 "listen"用于控制台输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43760704/

相关文章:

r - 时间序列用 R 转移到 future

r - 如何通过管道转发 ggplot 对象?

r - 如何从 pls 模型中解释 y 方差

r - 如何访问 R v3 中的 Windows COM 对象?

python - 如何在 python 中按下键盘来停止秒表?

javascript - 使用带有输入值的 if 语句 jquery

r - 如何在 data.table 中编写累积计算

Python tryexcept 用于用 "-"进行分割

c - 如何正确读取文件中的输入?

javascript - Angular Input Upload - 获取文件名并上传