如何使用checkboxGroupInput中下载的数据集中的变量

时间:2019-01-19 19:16:56

标签: r shiny

我想基于服务器中下载的列列表创建一个动态的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中。

2 个答案:

答案 0 :(得分:0)

您接近了!

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

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)

答案 1 :(得分:0)

您可以通过动态渲染UI来实现此目的,就像您之前尝试过的那样,只需对代码进行一些更改即可。但是,请确保将数据正确导入服务器。要对此进行检查,您可以在主面板中添加一个tableOutput。 也可以通过在开始时隐藏checkboxGroup输入并通过控制if(nrow(dataIn)>0)来显示数据来显示它,然后显示...来实现此目的...我对该程序包了解不多。

尝试这个,让我知道这是否解决了您的问题。使用dput()向我们提供您的数据样本,以尝试更好。 我编辑了代码。您现在也可以看到数据框的头部。

UI.R

ui<-fluidPage(
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")

          ),
  mainPanel(
  tableOutput("datacheck")
     )
    )
   )
 #Server.R

 shinyServer(function(input, output) {



 # 3 wczytywanie danych 
  dataIn <- reactive({
  req(input$fileInPath)
  read.csv(input$fileInPath$datapath)
  output$datacheck<-renderTable({ 
  if (is.null(dataIn)) {
    return(NULL)
  }
 head(dataIn())
   })




  columns <- reactive({colnames(dataIn())
                                           })
  output$ListOfColumns <- renderUI({
  checkboxGroupInput("Columns", "Choose columns", choices=columns())
  })     
  }