我想编写一个动态数字 n 的模块,比如UI元素。我发现input
广告位不与当前的元素数量相对应,但是会话期间选择的最大数量:
library(shiny)
library(plyr)
testUI <- function(id) {
ns <- NS(id)
uiOutput(ns("container"))
}
test <- function(input, output, session, numElems) {
output$container <- renderUI(do.call(tagList, llply(1:numElems(), function(i)
selectInput(session$ns(paste0("elem", i)),
label = i, choices = LETTERS[sample(26, 3)]))))
getNames <- reactive(reactiveValuesToList(input))
list(getNames = getNames)
}
ui <- fluidPage(numericInput("n", "Number of Elems", value = 3),
testUI("column1"),
verbatimTextOutput("debug"))
server <- function(input, output, session) {
getN <- reactive(input$n)
handler <- callModule(test, "column1", getN)
output$debug <- renderPrint(handler$getNames())
}
shinyApp(ui, server)
如果您将数字输入字段中的元素数量从3
更改为2
,我们会发现3
中仍有input
个元素。这种行为是故意的吗?如果是这样,我如何更新input
以确保它只包含有效的插槽?
更新
以下是2个相关的屏幕截图: