在R中访问键盘缓冲区

时间:2018-09-17 15:16:33

标签: r keyboard

是否可以访问R中的键盘缓冲区?我怀疑它是依赖于平台的,因此,出于价值考虑,我正在使用Windows 10。

具体来说,我想检查代码中特定位置键盘上是否有东西(任何东西)被按下,如果有,请执行某些操作,然后继续。例如:

### stuff here
if(!is.na(KEYBOARD_BUFFER)){  ### or !is.null, etc.
  stop("Someone pressed something!")
}
### stuff continues here

谢谢。

1 个答案:

答案 0 :(得分:0)

这不仅取决于平台,还取决于您如何在计算机上运行R。我希望这会有所不同,具体取决于您是运行R的简单终端版本还是运行R附带的R GUI或通过RStudio或类似的程序运行R。

如果您可以提供更多有关要完成的目标的详细信息,这也将有所帮助?为什么要停止或在脚本中执行其他操作。

通过将焦点移到一个新窗口来监视键盘输入并将其报告回脚本,可能会完成您想要的操作。例如,此答案:How to wait for a keypress in R?的代码将使用tcltk库弹出一个窗口,并等待按键或鼠标单击后再继续。

下面的代码可以完成您的建议:

library(tcltk)

evilglobalvariable <- NA

tt <- tktoplevel()
tkbind(tt, '<Key>', function(k) { evilglobalvariable <<- k})

for(i in 1:25) {
  cat(i, "\n")
  if(!is.na(evilglobalvariable)){
    stop('A key was pressed')
  }
  Sys.sleep(1)
}

如果在Tk窗口处于活动状态时按任意键,将停止循环。但是它不会检测到其他按键,例如如果您打开电子邮件程序并撰写邮件,则这些按键操作不会停止循环。

如果您要对此做任何严肃的事情,最好使用特定的环境而不是邪恶的全局变量。