Я ищу разъяснения о поведении возврата нескольких элементов пользовательского интерфейса из вызова 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)