#r #excel
#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:
Это можно сделать с помощью блока 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)}
}
Комментарии:
1. Спасибо! Я попробую это. Второй вопрос был просто вопросом, есть ли другие способы решения сообщения об ошибке, потому что я не уверен, что вызывает проблему.