【发布时间】:2018-04-17 17:53:57
【问题描述】:
我正在尝试构建一个闪亮的界面:
- 一个主选择器,它决定:
- 显示哪个子菜单(输入),由哪个决定:
- 要显示多少后续输入
这是一个可重现的最小示例。
如果从主选择器中选择“First”,则存在具有两种可能性 [1,2] 的子菜单。这些可能性导致构建 1 或 2 个后续输入。所以这些可能性:
如果从主选择器中选择“第二”,则存在具有两种可能性 [3,4] 的子菜单。这些可能性会导致构建 3 或 4 个后续输入。
ui <- fluidPage(
radioButtons(inputId="main_selector",label=h5('Select menu'),
choices = list('First','Second'),selected='First'),
uiOutput("ui_selected")
)
server <- function(input, output, session) {
build_inputs <- function(choices){
output = tagList()
for(i in 1:choices){
output[[i]] = tagList()
output[[i]][[1]] = numericInput(inputId = paste0(i),
label = paste0(i),
value = i)
}
}
# Are these reactive elements necessary? Should they be in the renderUI below?
first_submenu <- reactive({
input$first_submenu
})
second_submenu <- reactive({
input$second_submenu
})
output$ui_selected <- renderUI({
if (input$main_selector == 'First'){
selectInput(inputId = "first_submenu", label="First submenu",
choices=list(1,2))
choices_1 <- first_submenu()
# Build a list of inputs dependent on the choice above
output <- build_inputs(choices_1)
} else if (input$main_selector == 'Second'){
selectInput(inputId = "second_submenu", label="Second submenu",
choices=list(3,4))
choices_2 <- second_submenu()
# Build a list of inputs dependent on the choice above
output <- build_inputs(choices_2)
# Return output as output$ui_selected element
output
})
}
shinyApp(ui, server)
我收到的错误是警告:长度为 0 的 :: 参数中的错误。我相信这是因为您无法从 renderUI 元素调用 first_submenu 的结果 - 但我不知道如何正确构建我的代码。
【问题讨论】: