Как использовать переменные из загруженного набора данных в checkboxGroupInput - PullRequest
0 голосов
/ 19 января 2019

Я хотел бы создать динамический 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 голосов
/ 19 января 2019

Вы можете сделать это с помощью динамического рендеринга пользовательского интерфейса, как вы делали это ранее, с несколькими изменениями в коде.Однако убедитесь, что вы правильно импортируете свои данные на сервер.Чтобы проверить это, вы можете добавить 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())
  })     
  }
0 голосов
/ 19 января 2019

Ты близко!

но я чувствую, что основная ошибка в вашем примере - во второй последней строке

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...