在R中读取xlsx文件时如何使用错误处理?

时间:2019-03-27 19:38:55

标签: r excel

我试图读取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 个答案:

答案 0 :(得分:2)

这可以通过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)}

}