当前位置:  开发笔记 > 编程语言 > 正文

如何在Shiny eventReactive处理程序中侦听多个事件表达式

如何解决《如何在ShinyeventReactive处理程序中侦听多个事件表达式》经验,为你挑选了4个好方法。

我想要两个不同的事件来触发我的应用程序中各种图表/输出所使用的数据的更新.一个是单击按钮(input$spec_button),另一个是点击点上的点(mainplot.click$click).

基本上,我想同时列出两者,但我不知道如何编写代码.这就是我现在拥有的:

在server.R中:

data <- eventReactive({mainplot.click$click | input$spec_button}, {
    if(input$spec_button){
      # get data relevant to the button
    } else {
      # get data relevant to the point clicked
    }
  })

但if-else子句不起作用

Error in mainplot.click$click | input$spec_button : operations are possible only for numeric, logical or complex types

- >我可以使用某种动作组合器功能用于该mainplot.click$click | input$spec_button子句吗?



1> Duncan Brown..:

我知道这是旧的,但我有同样的问题.我终于弄明白了.您在大括号中包含一个表达式,只需列出事件/反应对象.我的(未经证实的)猜测是,闪亮只是对该表达式块执行与标准reactive块相同的反应指针分析.

observeEvent({ 
  input$spec_button
  mainplot.click$click
  1
}, { ... } )


只是一个警告:`observeEvent`默认使用`ignoreNULL = TRUE`,这意味着如果`mainplot.click $ click`(返回值)是'NULL`,即使`输入,处理程序也将****$ spec_button`已更改.我建议@ JustAnother的答案,以防止陷入这个陷阱.
你能确定哪个事件被触发了吗?

2> 小智..:

也:

observeEvent(c( 
  input$spec_button,
  mainplot.click$click
), { ... } )


虽然这看起来与@DuncanBrown的答案非常相似,但我发现了一个情况,其中2个动作按钮都触发模态,这个工作,而`{`版本没有.我无法解释为什么会这样.
在@Duncan Brown的答案中添加了注释,说明此答案有何不同(以及更好的IMO)

3> 小智..:

我已经通过创建一个反应对象解决了这个问题,并在事件更改表达中使用它.如下:

xxchange <- reactive({
paste(input$filter , input$term)
})

output$mypotput <- eventReactive( xxchange(), {
...
...
...
} )


这是一个非常好的答案,可以从更多的解释中受益.虽然接受的答案更简单,使其更适合基本程序,但这个答案更适合于大型复杂的代码.答案中似乎缺少两点(1)粘贴(或列表)将两个事件放在同一行,使代码更紧凑.(2)如果多个侦听器正在侦听同一组事件,则被动对象可以省去一遍又一遍地重复相同的两个事件的工作.

4> Hillary Sand..:

这是我提出的解决方案:基本上,创建一个空reactiveValues数据持有者,然后根据两个单独的observeEvent实例修改其值.

  data <- reactiveValues()
  observeEvent(input$spec_button, {
    data$data <- get.focus.spec(input=input, premise=premise, 
                                itemname=input$dropdown.itemname, spec.info=spec.info)
  })
  observeEvent(mainplot.click$click, {
    data$data <- get.focus.spec(input=input, premise=premise, mainplot=mainplot(),
                                mainplot.click_focus=mainplot.click_focus(),
                                spec.info=spec.info)  
  })

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有