R Shiny: условная панель с renderUI не работает - PullRequest
0 голосов
/ 21 октября 2019

Я пытаюсь отобразить некоторый пользовательский интерфейс в условиях. Я хотел бы, чтобы способ выбора входных данных варьировался в зависимости от типа данных: если выбран тип Type X, я хочу отобразить selectizeInput, а когда выбран Type Y, я хочу отобразить sliderInput,Для этого я использую uiOutput в conditionalPanel.

Вот что я сделал до сих пор, следуя этому вопросу :

library(shiny)
library(shinyWidgets)
library(WDI)
library(DT)
library(dplyr)

foo <- data.frame(foo_name = c("A", "A", "B", "B", "C", "C"))
data <- cbind(head(mtcars), foo)

ui <- navbarPage(position = "static-top",

                 tabPanel(title = "Base 1",
                          fluidRow(
                            dropdownButton(

                              selectInput(inputId = "choice",
                                          label = "Type of data",
                                          choices = c("Type X",
                                                      "Type Y"),
                                          selected = NULL,
                                          multiple = FALSE),
                              conditionalPanel(
                                condition = "input$choice == 'Type X'",
                                uiOutput("machin")
                                ),
                              conditionalPanel(
                                condition = "input$choice == 'Type Y'",
                                uiOutput("machin2")
                                ),

                              circle = TRUE, status = "primary", 
                              icon = icon("gear"), 
                              width = "300px",
                              tooltip = tooltipOptions(title = "Outils")
                            ),
                            column(width = 12,
                                   dataTableOutput("data"))
                          ))

)


server <- function(input, output) {

  output$machin <- renderUI({
        selectizeInput(inputId = "test",
                       label = "test",
                       choices = unique(data$foo_name),
                       selected = NULL, 
                       multiple = T)
  })

output$machin2 <- renderUI({
      sliderInput("test2", 
                    "Test2", 
                    min = min(data$hp), 
                    max = max(data$hp), 
                    value = c(min(data$hp), 
                              max(data$hp))
                    )
        })


  output$data <- renderDataTable({
    if(input$choice == "Type X"){
    data2 <- data %>%
      filter(foo_name %in% input$test)
    }
    else if(input$choice == "Type Y"){
      data3 <- data %>%
        filter(hp %in% input$test2)
    }
  })

}


shinyApp(ui = ui, server = server)

Несколько проблемздесь:

  • Оба типа входов отображаются независимо от того, какой тип данных выбран
  • , когда выбран тип X, кадр данных пуст (так как selectizeInput равен NULL), но когдаТип Y выбран, некоторые значения кадра данных отображаются

Как это исправить?

1 Ответ

0 голосов
/ 21 октября 2019

В следующий раз сначала проверьте страницу справки в R (?conditionalPanel) или найдите функцию онлайн . Условие является выражением JavaScript, поэтому ваш знак $ не работает. Это должно быть. (точка).

conditionalPanel(
  condition = "input.choice == 'Type X'",
  uiOutput("machin")
),
conditionalPanel(
  condition = "input.choice == 'Type Y'",
  uiOutput("machin2")
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...