Как использовать поступление блестящего файла для создания реактивного объекта для загрузки data.frame - PullRequest
0 голосов
/ 06 декабря 2018

Я использовал fileInput в своем блестящем приложении, чтобы загрузить файл, а затем создать реактивный объект, который позволяет мне читать data.frame и делать другие вещи, такие как поднаборы или фильтрация.Однако мне нужно получить абсолютный путь к файлу для других вычислений, и, похоже, fileUpload хранит только временный путь.

Вот серверная часть, которая работает

 server = function(input, output) {
 options(shiny.maxRequestSize=100*1024^2)

 contents <- reactive({
     inputFile <- input$fileUpload
     if (is.null(inputFile))
     return()
     read.delim(inputFile$datapath, header = TRUE)
 })

 # Return filename as another object
 file_name <- reactive({
      inFile <- input$fileUpload
      if (is.null(inFile))
      return()
      else {  print(inFile$name); return(tools::file_path_sans_ext(inFile$name))}
  })  

output$tabla <- DT::renderDataTable({
if(is.null(contents()))
  return()
  DT::datatable(contents(), 
              filter = 'top')
})

Тем не менее, я хотел бы использовать опцию shinyFiles, потому что она хранит реальный путь, и мне понадобится этот путь для загрузки большего количества файлов, которые у меня есть, эта часть кода на сервере пытается имитировать то же поведение, что и fileUpload, ноэто не работает

server = function(input, output, session) {

volumes = getVolumes()
volumes <- c(Home = fs::path_home(), "R Installation" = R.home(), getVolumes()())

file_selected <- reactive({
   shinyFileChoose(input, "file", roots = volumes, session = session)
   return(parseFilePaths(volumes, input$file))
})

contents <- reactive({
  if (is.null(file_selected()))
  return()
  read.delim(file_selected(), header = TRUE)
})

# Reactive function creating the DT output object
 output$tabla <- DT::renderDataTable({
  if(is.null(contents()))
   return()
   DT::datatable(contents(), 
              filter = 'top')
 })

Я получил ошибку о file должна быть строка символов или соединение, и если я использую read.delim(as.character(file_selected()), header = TRUE), то ошибка о недопустимом аргументе "description"

1 Ответ

0 голосов
/ 08 декабря 2018

Существуют различные возможные причины ошибки.Попробуйте выполнить следующие действия:

  • Используйте req(input$file) перед синтаксическим анализом путей к файлам
  • Проверьте, равно ли input$file NULL перед синтаксическим анализом путей к файлам
  • Возврат$datapath функции parseFilePaths.

В соответствии с этим ваш код должен выглядеть следующим образом:

file_selected <- reactive({
   shinyFileChoose(input, "file", roots = volumes, session = session)
   req(input$file)
   if (is.null(input$file))
      return(NULL)    
   return(parseFilePaths(volumes, input$file)$datapath)
})

Надеюсь, он работает для вас.

...