блестящий: переключатель не скрывает пользовательский интерфейс, если условие не имеет значения ИСТИНА - PullRequest
0 голосов
/ 13 апреля 2019

Я играю с shinyjs pkg и различными вариантами скрытия / отображения пользовательского интерфейса.В приложении ниже я хочу показать выбранные графики и, если ни один вариант не выбран, отобразить пустое пространство.Я использую toggle(), который делает трюк, пока выбран хотя бы один параметр в checkboxGroupInput, но когда не выбран ни один параметр, отображаются оба графика.Согласно документации :

Если условие задано для переключения, это условие будет использоваться для определения, показывать или скрывать элемент.Элемент будет показан, если условие оценивается как ИСТИНА и скрыт в противном случае.

Я что-то упускаю здесь очевидное?

library(shiny)
library(shinyjs)
library(ggplot2)

ui <-dashboardPage(
  dashboardHeader(),
  dashboardSidebar(),
  dashboardBody(
    useShinyjs(),
    checkboxGroupInput(inputId = 'options',
                       label = 'Choose your plot(s)',
                       choices = list("Plot 1" = 1,
                                      "Plot2" = 2)),
                       #selected = 1:2),
    verbatimTextOutput('checkbox_text'),
        uiOutput("Ui1"),
        uiOutput('Ui2')
        )
)

server <- function(input, output, session) {

  output$checkbox_text <- renderText({
    paste(input$options)
  })


    observe({
    shinyjs::toggle(id = "Ui1", condition = input$options == 1)
    shinyjs::toggle(id = "Ui2", condition = input$options == 2)
  })

  output$Ui1 <- renderUI({

    output$plot1 <- renderPlot({
      p <- ggplot(mtcars, aes(disp, mpg)) +
        geom_point() +
        geom_smooth() +
        ggtitle('Plot 1')
      p  
    })

    plotOutput('plot1')
  })

  output$Ui2 <- renderUI({

    output$plot2 <- renderPlot({
      p<- ggplot(mtcars, aes(disp, mpg, colour = as.factor(cyl))) +
        geom_point() +
        ggtitle('Plot 2')
      p
    })

    plotOutput('plot2')
  })

}

shinyApp(ui, server)

1 Ответ

1 голос
/ 14 апреля 2019

Когда вы ищете, какие флажки установлены в checkboxGroupInput, обычно лучше сделать оценку того, равно ли значение, которое вас интересует, любому из значений в checkboxGroupInput - заменив ваш оператор observeэто решит проблему:

  observe({
    shinyjs::toggle(id = "Ui1", condition = {1 %in% input$options})
    shinyjs::toggle(id = "Ui2", condition = {2 %in% input$options})
  })

Тем не менее, я не уверен, почему если ни один из флажков не установлен, то в вашем случае TRUE.

...