Чтобы добавить счетчик к lapply
Я бы просто сделал:
file_names <- list.files(path="D:/ABCDE", recursive=TRUE)
idx=1:length(filenames) #this will server as your 'counter'
lapply(idx, function(i) {print(file_names[i]); read.csv(file=file_names[i],header = FALSE)}) # this will print the file and when the loop stops you'll see the file that is faulty
Однако в качестве другого решения - чтобы узнать, какие файлы неисправны и пропустить их естественным путем - я бы сделал:
wanted=c()
for(f in file_names){
first_line=system(paste0('head -n 1',f),intern=T) # sends prompt to command line to print first line of files. intern=T means one can set this to a variable
if(nchar(first_line > quota)){ #set quota to provide threshold for a number of columns
wanted=c(wanted,f)
}
}
Вы можете сделать то же самое с sapply
.
А потом:
all_dta <- do.call(rbind, lapply(wanted, function(x) read.csv(file=x,header = FALSE)))
И если вы хотите знать, какие файлы неисправны (то есть, какие не содержат достаточного количества столбцов). Просто найдите файлы, у которых количество столбцов меньше квоты:
unwanted=c()
for(f in file_names){
first_line=system(paste0('head -n 1',f),intern=T) # sends prompt to command line to print first line of files. intern=T means one can set this to a variable
if(nchar(first_line < quota)){
unwanted=c(unwanted,f)
}
}