Je souhaite que deux événements différents déclenchent une mise à jour des données utilisées par divers tracés/sorties dans mon application. L’un est un bouton sur lequel on clique (input$spec_button
) et l’autre est un point sur un point sur lequel on clique (mainplot.click$click
).
En gros, je veux lister les deux en même temps, mais je ne sais pas comment écrire le code. Voici ce que j'ai maintenant:
dans 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
}
})
Mais la clause if-else ne fonctionne pas
Error in mainplot.click$click | input$spec_button : operations are possible only for numeric, logical or complex types
-> Existe-t-il une sorte de fonction de combinaison d’actions que je peux utiliser pour le mainplot.click$click | input$spec_button
clause?
Je sais que c'est vieux, mais j'avais la même question. J'ai finalement compris. Vous incluez une expression entre accolades et vous ne faites que lister les événements/objets réactifs. Mon hypothèse (non fondée) est que shiny effectue simplement la même analyse de pointeur réactif pour ce bloc d'expression que pour un bloc standard reactive
.
observeEvent({
input$spec_button
mainplot.click$click
}, { ... } )
Également:
observeEvent(c(
input$spec_button,
mainplot.click$click
), { ... } )
Voici la solution que j'ai proposée: en gros, créez un détenteur de données reactiveValues
vide, puis modifiez ses valeurs en fonction de deux instances distinctes 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)
})
J'ai résolu ce problème en créant un objet réactif et en l'utilisant dans l'expression de changement d'événement. Comme ci-dessous:
xxchange <- reactive({
paste(input$filter , input$term)
})
output$mypotput <- eventReactive( xxchange(), {
...
...
...
} )