Загрузить файл .xlsx, .xls, .csv

#r #shiny

Вопрос:

В настоящее время я могу загрузить файл .csv, но когда я пытаюсь загрузить файл .xlsx или .xls, я получаю сообщение об ошибке. «Предупреждение в read.table(файл = файл, заголовок = заголовок, sep = sep, цитата = цитата, : неполная заключительная строка найдена читаемым заголовком на ‘/var/folders/k7/s4xbp26d059b_sm6q08hl5mm0000gn/T//Rtmp6mzvQO/de97a3667d0706ae06136c4b/0.xlsx»

В настоящее время это то, что у меня есть.

 library(shiny)
library(xlsx)


population <- read.xlsx("population.xlsx", 1)


fieldsMandatory <- c("selectedCountry", "modelSelect", "seedData")

labelMandatory <- function(label) {
  tagList(
    label,
    span("*", class = "mandatory_star")
  )
}

appCSS <-
  ".mandatory_star {color: red;}"

appCSS <- ".invisible {display:none;}"

ui <- fluidPage(
  
  div(
    class = "invisible",
    titlePanel("Spatial Tracking of COVID-19 using Mathematical Models")
  ),
  
  navbarPage(title = span("Spatial Tracking of COVID-19 using Mathematical Models", style = "color:#000000; font-weight:bold; font-size:15pt"),
             
             tabPanel(title = "Model",
                      sidebarLayout(
                        sidebarPanel(
                          
                              fileInput("seedData", labelMandatory ("Upload initial seed data (.csv or .xls or .xlsx)"),
                                        accept = c(
                                          "text/csv",
                                          "text/comma-separated-values,text/plain",
                                          ".csv",
                                          ".xls",
                                          ".xlsx"),
                              ),
             
                        ), 
                        mainPanel(
          
                            tabPanel("Initial Seed Data",
                                     tableOutput("tableSeed")),
                            
                         
                          )
                        )
                        
                       
                      )
             )
             
             
             
  )


server <- function(input, output, session){
  
  
}

shinyApp(ui,server)
 

Комментарии:

1. read.table ожидает csv или txt. Вам могут понадобиться пакеты .xlsx , например read_excel (readxl) или read.excel (от xlsx)

2. Спасибо вам за ваш ответ. Я загрузил пакет xlsx, и он по-прежнему выдает мне ту же ошибку.

3. хорошо, ваш код не воспроизводим для тестирования

4. Я обновил код, чтобы его можно было протестировать

5. Когда я скопировал ваш код, там было написано upload complete для xlsx или csv. Серверная часть в вашем коде пуста

Ответ №1:

Поскольку для чтения данных excel и данных csv требуются разные функции, вы можете извлечь расширение из пути к файлу и использовать эту функцию соответствующим образом.

Это может помочь —

 library(shiny)

ui <- fluidPage(
  fileInput("seedData", "Upload initial seed data (.csv or .xls or .xlsx)",
            accept = c(
              "text/csv",
              "text/comma-separated-values,text/plain",
              ".csv",
              ".xls",
              ".xlsx")
  ),
  tableOutput('table')
)

server <- function(input, output) {
  
  data <- reactive({
    req(input$seedData)
    ext <- tools::file_ext(input$seedData$datapath)
    if(ext == 'xlsx')
      readxl::read_excel(input$seedData$datapath)
    else 
      read.csv(input$seedData$datapath)
  })
  
  output$table <- renderTable(data())
}


shinyApp(ui, server)