【问题标题】:Access keyboard buffer in R在 R 中访问键盘缓冲区
【发布时间】:2018-09-17 15:16:33
【问题描述】:

有没有办法访问 R 中的键盘缓冲区?我怀疑它依赖于平台,因此我使用的是 Windows 10。

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

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

提前谢谢你。

【问题讨论】:

  • 根据this answer,这肯定是依赖于平台的 C 上下文中的一个类似问题。由于您可以从 R 调用 C 代码,您可能可以根据您的需要调整该答案。跨度>

标签: r keyboard


【解决方案1】:

这不仅取决于平台,还取决于您在计算机上运行 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 窗口处于活动状态时按任意键,这将停止循环。但它不会检测到其他按键,例如如果您打开电子邮件程序并撰写邮件,这些按键不会停止循环。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-03
    • 1970-01-01
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-05
    相关资源
    最近更新 更多