Как я могу использовать обработку ошибок при чтении файлов xlsx в R? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь прочитать 23 файла Excel, сохранить каждый в списке, а затем привязать их к одному CSV.Некоторые из этих файлов CSV, а некоторые из них XLSX.Однако я получил следующее сообщение:

Error: Can't establish that the input is either xls or xlsx.

Поэтому я хочу определить, какие из них дают ошибку, а затем добавить ее вручную.

Моя функция следующая:

make_df<-function(filename){
  library(readxl)
  library(foreign)
  if (str_sub(filename,-3,-1) == "csv"){
    df<-read.csv(filename,fileEncoding="latin1")
  }
    else{
      df<-read_excel(filename)
    }
  return(df)
}

filenames_vector<-list.files(# directory)


datalist = list()

for (i in 1:23){
  datalist[[i]] <- make_df(filenames_vector[i])
}


mega_data = do.call(rbind,datalist)

Как я могу добавить что-то в make_df для распечатки имен файлов, которые вызывают сообщение об ошибке?Кроме того, есть ли еще один обходной путь, когда сообщение об ошибке не может отличить xlsx от xls?

1 Ответ

2 голосов
/ 27 марта 2019

Это можно сделать с помощью блока tryCatch. Без примеров данных это немного сложно воссоздать. Я не уверен, что вы имеете в виду во втором вопросе.

Попробуйте приведенный ниже код, чтобы перехватить ошибки и распечатать имя файла, если есть ошибка, в противном случае вернуть объект df.

make_df<-function(filename){
  library(readxl)
  library(foreign)

  df = tryCatch(
   { # try block
     if (str_sub(filename,-3,-1) == "csv"){
       df<-read.csv(filename,fileEncoding="latin1")
     }
     else{
       df<-read_excel(filename)
     }
   },
   error=function(cond){return(filename)} # grab the filename if there was an error
  )

  if (class(df) == 'character') {
    print(df)
  } else{return(df)}

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