我正在尝试创建一个闪亮的应用程序,用户可以从中选择数据框中的变量,以便对数据进行子集化。输出将(最终)是具有用户子集的数据表。我需要创建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
会更改其他组的选择。我希望每个单选按钮设置为与数据框中的变量对应的名称,我希望每个按钮的选择与其他所选按钮无关。
答案 0 :(得分:1)
您的问题(请参阅警告)是您始终为每个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"))
})