Подтвердить что ты не робот

Как прослушивать более одного выражения события в обработчике событий Shiny eventReactive

Я хочу, чтобы два разных события вызывали обновление данных, используемых различными графиками/выводами в моем приложении. Один - нажатие кнопки (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?

4b9b3361

Ответ 1

Я знаю, что это старо, но у меня был тот же вопрос. Я наконец-то понял. Вы включаете выражение в фигурные скобки и просто указываете события/реактивные объекты. Моя (необоснованная) догадка заключается в том, что блестящий просто выполняет такой же анализ реактивного указателя на этот блок выражений как стандартный блок reactive.

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

Ответ 2

также:

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

Ответ 3

Вот решение, с которым я столкнулся: в основном создайте пустой держатель данных 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)  
  })

Ответ 4

Я решил эту проблему с созданием реактивного объекта и использовать его в выражении изменения события. Как показано ниже:

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

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