Возврат нескольких элементов пользовательского интерфейса в R Shiny с tagList, содержащим реактивы - PullRequest
0 голосов
/ 29 апреля 2020

Я ищу разъяснения о поведении возврата нескольких элементов пользовательского интерфейса из вызова renderUI на стороне сервера с tagList. Выполнение примера renderUI работает - возвращается несколько элементов, но виджеты не создаются с переданными им реактивными. Передача реактивной переменной для создания виджета не отображает любой виджет в tagList и не выдает ошибок. Кроме того, разделение tagList на 2 разных вызова renderUI успешно отображает оба виджета с реактивом и без него.

Как правильно передать реактив в tagList для создания виджета на основе его значения?

Вот небольшое блестящее приложение, отображающее поведение 3 сценария ios описано:

library(shiny)
ui <- fluidPage(
  titlePanel(""),

  # Sidebar 
  sidebarLayout(
    sidebarPanel(h4("tagList no reactives works"),
                 uiOutput("moreControls"),
                 h4("tagList with reactive does not work"),
                 uiOutput("one"),
                 h4("Seperate renderUIs w/ reactives works"),
                 uiOutput("two"),
                 uiOutput("three")
                 ),
    mainPanel()
  )
)

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

  data <- list(cars = mtcars,
               iris = iris)

  data_name <- names(data)

  col_name <- reactive({
    req(input$dat)
    index <- which(data_name == input$dat)
    colnames(data[[index]])
  })

  col_name2 <- reactive({
    req(input$dat2)
    index <- which(data_name == input$dat2)
    colnames(data[[index]])
  })

  output$one <- renderUI({
    tagList(
      selectInput("dat",
                  "Data",
                  choices = data_name,
                  multiple = FALSE),
      selectInput("col",
                  "Col",
                  choices = col_name(), #this reactive here seems to throw things off
                  multiple = FALSE)
    )
  })

  output$two <- renderUI({
    selectInput("dat2",
                "Data2",
                choices = data_name,
                multiple = FALSE)
  })

  output$three <- renderUI({
    selectInput("col2",
                "Col2",
                choices = col_name2(),
                multiple = FALSE)
  })

  output$moreControls <- renderUI({
    tagList(
      sliderInput("n", "N", 1, 1000, 500),
      textInput("label", "Label")
    )
  })
}
# Run the application 
shinyApp(ui = ui, server = server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...