поведение «наблюдать` в» событии наблюдения » или `если`

#r #shiny

Вопрос:

Как observe ведет if себя оператор in или в observeEvent ?
Является ли он автономным от if или observeEvent ?
В следующем коде observe не активируется dummy кнопкой, если go кнопка не вызывает удовлетворенное if условие, а затем dummy кнопка всегда срабатывает observe .

 shiny::reactiveConsole(T)
library(shiny)
ui <- fluidPage(
  selectInput(
    inputId = "select1",
    label = "select1" ,
    choices = c("True" = T, "False" = F) ,
    selected =  "T",
    multiple = F
  ),
  
  selectInput(
    inputId = "select2",
    label = "select2" ,
    choices = c("True" = T, "False" = F) ,
    selected =  "T",
    multiple = F
  ),
  selectInput(
    inputId = "select3",
    label = "select" ,
    choices = c("True" = T, "False" = F) ,
    selected =  "T",
    multiple = F
  ),
  actionButton(inputId = "go" ,
               label = "Go"),
  actionButton(inputId = "dummy" ,
               label = "dummy")
  
)

server <- function(input, output, session) {
  observeEvent(eventExpr = input$go ,
               handlerExpr = {
                 inputs = reactiveValuesToList(input)
                 select_input = inputs[startsWith(names(inputs), "select") amp;
                                         grepl(".*[0-9]$",
                                               names(inputs))]
                 if (sum((select_input == "TRUE")) >= 2) {
                   observe({
                     input$dummy
                     print(select_input)
                   })
                 } else{
                   print("nothing")
                 }
               })
}
shinyApp(ui, server)


 

Комментарии:

1. if Утверждение здесь является отвлекающим маневром, проблема в том, что вы не можете вложить реактивный блок, как в observeEvent(..., { observe(...); }) .

2. Основываясь на этом коде, замените свой внутренний observe(...) на просто print(select_input) (нет observe ), возможно, это даст желаемые результаты. (Я не знаю , с чем вам нужно, чтобы это произошло, это полный отказ.) observe({input$dummy})