我试图读取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,是否还有其他解决方法?
答案 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)}
}