Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 在屏幕上注册重复的键盘按键_R_Shiny - Fatal编程技术网

R 在屏幕上注册重复的键盘按键

R 在屏幕上注册重复的键盘按键,r,shiny,R,Shiny,我正在尝试构建一个捕获键盘按键的应用程序,但是我遇到了一个问题,即如果连续使用相同的键盘按键,那么shiny似乎不会注册输入。想知道是否有办法解决这个问题 这就是我的意思 library(shiny) runApp( list(ui = bootstrapPage( verbatimTextOutput("results"), tags$script(' $(document).on("keydown", function (e) { Shiny.onInp

我正在尝试构建一个捕获键盘按键的应用程序,但是我遇到了一个问题,即如果连续使用相同的键盘按键,那么shiny似乎不会注册输入。想知道是否有办法解决这个问题

这就是我的意思

library(shiny)
runApp( list(ui = bootstrapPage(
    verbatimTextOutput("results"),
    tags$script('
    $(document).on("keydown", function (e) {
       Shiny.onInputChange("down", e.which);
    });'),
    tags$script('
    $(document).on("keyup", function (e) {
                Shiny.onInputChange("up", e.which);
                });')
)
, server = function(input, output, session) {

    output$results = renderPrint({
        print(rnorm(1))
        c(input$down, input$up)
    })
}
))

在键盘上键入/释放不同的字符会生成新的输入,因此当这些事件发生时会调用随机数生成器。但是输入,比如说,
'g'
'g'
'g'
只注册第一次上下击键,而忽略其余的击键

闪亮。onInputChange
仅当它引用的js对象发生更改时才会作出反应,但您编写js的方式是,通过多次按同一键,将值重新分配给同一对象。 一个丑陋的解决方法可能是将变量设置为按键和数组中的随机浮点

library(shiny)
runApp( list(ui = bootstrapPage(
  verbatimTextOutput("results"),
  tags$script('
              $(document).on("keydown", function (e) {

              Shiny.onInputChange("down", [e.which,Math.random()]);
              });'),
    tags$script('
                $(document).on("keyup", function (e) {

                Shiny.onInputChange("up",  [e.which,Math.random()]);
                });')
)
, server = function(input, output, session) {

  output$results = renderPrint({
    print(rnorm(1))
    c(input$down[1], input$up[1])
  })
}
  ))
消除生成随机数的需要,并将一些潜在有用的信息传回可能更有效。例如,使用timestamp属性可以在按键时实现一些过滤

library(shiny)
runApp( list(ui = bootstrapPage(
  verbatimTextOutput("results"),
  tags$script('
          $(document).on("keydown", function (e) {

          Shiny.onInputChange("down", [e.which,e.timeStamp]);
          });'),
tags$script('
            $(document).on("keyup", function (e) {

            Shiny.onInputChange("up",  [e.which,e.timeStamp]);
            });')
)
, server = function(input, output, session) {

  output$results = renderPrint({
    print(rnorm(1))
    c(input$down[1], input$up[1])
  })
}
  ))

没错。这个变通方法也是我经常做的。我已经和Joe Cheng讨论过这个问题,它可能在某个时候被“修复”。谢谢你的回复@user5219763,尽管我不太确定我是否明白你的意思。您介意编辑提供的示例以实现此效果吗?可能不是最好的实现,但编辑应该可以工作。请随意评论github问题,以表明受此影响的人更多,这可能会促使他们将此作为更高的优先级:)