繁体   English   中英

根据用户输入将 n 个反应式单选按钮添加到闪亮的应用程序

[英]Add n reactive radioButtons to shiny app depending on user input

我正在尝试创建一个闪亮的应用程序,用户可以在其中从数据框中选择变量以便对数据进行子集化。 输出(最终)将是一个包含用户子集的数据表。 我需要根据用户为子集选择的变量数量创建 n 个输入框。 理想情况下,输入框将是动态单选按钮(用于子集因素)。 我还没有打印数据框,但我已经能够创建多个单选按钮。 我已经习惯于使用mtcars数据集来执行以下代码来实现这一点:

服务器

library(shiny)

shinyServer( function(input, output, session) {

  output$variables <- renderUI({
    numVar <- length(as.integer(input$in0))

    lapply(1:numVar, function(i) {
      list(radioButtons("dynamic", input$in0, 
                        choices = c("Choice one" = "one", "Choice two" = "two"), selected = "one"))
    })
  })
})  

用户界面

library(shiny)

shinyUI(pageWithSidebar (

  headerPanel("mtcars subset"),

  sidebarPanel(
    selectInput(inputId = 'in0', label = 'Choose variables', 
                choices = colnames(mtcars), 
                multiple = TRUE, selectize = TRUE),
    uiOutput("variables")
  ),
  mainPanel()
)) 

该代码创建了 n 个单选按钮; 然而,出于某种原因,它默认打印两组按钮。 此外,每组新按钮的名称始终是所选的第一个变量的名称。 此外,在一组中choice one选项会改变其他组的选择。 我希望每个单选按钮集都有一个与数据框中的变量相对应的名称,并且我希望每个按钮的选择独立于其他选定的按钮。

你的问题(见警告)是你总是为每个radioButtons使用相同的名称,而你应该用i索引它们:

lapply(1:numVar, function(i) {
      list(radioButtons(paste0("dynamic",input$in0[i]), input$in0[i], 
                        choices = c("Choice one" = "one", "Choice two" = "two"), selected = "one"))
    })

或者更优雅一点:

lapply(input$in0, function(x) {
    list(radioButtons(paste0("dynamic",x), x, 
                     choices = c("Choice one" = "one", 
                                 "Choice two" = "two"), selected = "one"))
    })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM