是否可以访问R中的键盘缓冲区?我怀疑它是依赖于平台的,因此,出于价值考虑,我正在使用Windows 10。
具体来说,我想检查代码中特定位置键盘上是否有东西(任何东西)被按下,如果有,请执行某些操作,然后继续。例如:
### stuff here
if(!is.na(KEYBOARD_BUFFER)){ ### or !is.null, etc.
stop("Someone pressed something!")
}
### stuff continues here
谢谢。
答案 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窗口处于活动状态时按任意键,将停止循环。但是它不会检测到其他按键,例如如果您打开电子邮件程序并撰写邮件,则这些按键操作不会停止循环。
如果您要对此做任何严肃的事情,最好使用特定的环境而不是邪恶的全局变量。