首页 > 解决方案 > 如何在 checkboxGroupInput 中使用下载数据集中的变量

问题描述

我想根据从服务器中下载的列列表创建一个动态 checkboxGroupInput

我试过全局变量 updatecheckboxGroupInput 和 RenderUi

        # UI.R 

    sidebarLayout(

    sidebarPanel(
        fileInput("fileInPath", 
            label= h4("Import danych"), accept=("text/csv")),
        radioButtons('plott','Plot',c('ggplot2'='ggplot2', 'lattice'='lattice')
            ),
        radioButtons('format', 'Document format', c('PDF', 'HTML', 'Word'),
                     inline = TRUE),
        downloadButton('downloadReport',label="Wygeneruj raport"),
        uiOutput("ListOfColumns")

       ),


#Server.R

 shinyServer(function(input, output) {



# 3 wczytywanie danych 
dataIn <- reactive({
    inFile <- input$fileInPath

    if (is.null(inFile)) {
        return(NULL)
    }
    read.table(file=inFile$datapath,sep=";",dec=",",header=T,stringsAsFactors=FALSE)
})
output$ListOfColumns <- renderUI({
columns <- colnames(dataIn)
  checkboxGroupInput("Columns", "Choose columns", columns)
})}

我希望下载文件中的列列表出现在 checkboxGroupInput 中。

标签: rshiny

解决方案


你很近!

但我觉得您示例中的主要错误在倒数第二行

columns <- colnames(dataIn)

它应该是

columns <- colnames(dataIn())

工作示例

我使用了一个示例 csv 文件来测试文件读取和解析与您的示例略有不同。

ui = fluidPage(
  titlePanel("Sample"),
  sidebarLayout(
    sidebarPanel(
      fileInput("fileInPath", "Choose File",
                multiple = FALSE,
                accept = c("text/csv",
                           "text/comma-separated-values,text/plain",
                           ".csv")),
      radioButtons('plott','Plot',c('ggplot2'='ggplot2', 'lattice'='lattice')
      ),
      radioButtons('format', 'Document format', c('PDF', 'HTML', 'Word'),
                   inline = TRUE),
      downloadButton('downloadReport',label="Wygeneruj raport"),
      uiOutput("ListOfColumns")

    ),
    mainPanel()
  )
)



  #Server.R

  server = function(input, output) {

    # 3 wczytywanie danych 
    dataIn <- reactive({
      req(input$fileInPath)
      read.csv(file=input$fileInPath$datapath)
    })

    output$ListOfColumns <- renderUI({
      req(dataIn())
      columns <- colnames(dataIn())

      checkboxGroupInput("Columns", "Choose columns",columns)
    })}

shinyApp(ui,server)

我使用mtcars可以保存到计算机的数据集对其进行了测试

write.csv(mtcars,file = "~/Desktop/Data.csv",row.names = FALSE)


推荐阅读