Как прослушивать более одного выражения события в обработчике событий 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
?
Ответы
Ответ 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(), {
...
...
...
} )