Как я могу использовать имена столбцов файла CSV в качестве выбора ввода? - PullRequest
0 голосов
/ 08 января 2019

Я создал приложение Shiny, которое принимает файлы Excel и CSV в качестве входных данных. Кроме того, следует прогнозировать показатель, который можно найти в загруженном файле. Чтобы иметь возможность определить правильный столбец в файле, пользователь должен иметь возможность выбрать столбец, который следует прогнозировать. Вот почему я хочу иметь выделенную область ввода, где отображаются все имена столбцов файла. Но я не нахожу правильного решения.

В следующем моем приложении:

пользовательский интерфейс:

 ui <- fluidPage(  

  #definition which file input is allowed
  fileInput(
    'file',
     label = h4("Welche Datei soll hochgeladen werden?"),
     multiple= FALSE,
     accept = c(
      'text/csv',
      'text/comma-separated-values,text/plain',
      '.csv',
      '.xlsx'
   )
  ),

Сервер:

server <- function(input, output) {

#read data 
data <- reactive({

  validate(need(input$file, ""))
  infile <- input$file

  if (input$type == "1") {
   read.csv(infile$datapath,
           header = input$header,
           sep = input$sep,
           stringsAsFactors = FALSE)
  } else {
  read_xlsx(infile$datapath)
  }    

})

И я подумал о чем-то подобном на сервере, но не смог окончательно решить проблему:

names <- reactive({
 df <- data()
 if (is.null(df)) return(NULL)

 items=names(df)
 names(items)=items

 return(names(items))

})

Спасибо за любую помощь!

1 Ответ

0 голосов
/ 08 января 2019

Внутри интерфейса вы должны добавить:

selectInput("columnid","Column to forecast",choices=c())

ваш сервер должен запуститься так: server <- function(session,input, output) {

и внутри сервера, после else внутри вашего реактива вы можете добавить:

updateSelectInput(session,"columnid",choices=colnames(mydata))

не забудьте назвать «mydata» данными, которые были прочитаны, и return ими, например:

data <- reactive({

  validate(need(input$file, ""))
  infile <- input$file

  if (input$type == "1") {
   mydata=read.csv(infile$datapath,
           header = input$header,
           sep = input$sep,
           stringsAsFactors = FALSE)
  } else {
   mydata=read_xlsx(infile$datapath)
  }
  updateSelectInput(session,"columnid",choices=colnames(mydata))
return(mydata)
})
...