根据用户输入,在shiny应用中添加n个响应式radio按钮

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

server.R

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"))
    })
  })
})  

ui.R

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”会更改其他组的选择。我希望每组单选按钮都有一个与数据框中变量相对应的名称,并且我希望每个按钮的选择独立于其他选择的按钮。
1个回答

2

您的问题(请参见警告)是,您总是为每个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"))
    })

很棒!谢谢。 - babylinguist

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接