R: Быстрое чтение в текстовых файлах с помощью TryCatch () - сравнение скорости обработки sapply и цикла for - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь прочитать в первой строке приблизительно 13 000 текстовых файлов и сохранить их в векторе с именем flines26. Одна проблема, с которой я сталкиваюсь, заключается в том, что несколько файлов (может быть, всего 100) абсолютно пустые, и поэтому fread() выдает ошибку. Я попытался прочитать эти данные, используя как sapply, так и цикл for (с пониманием, что sapply() должно быть быстрее).

Однако, используя код, который я написал, цикл for работает лучше. Моя попытка использовать sapply, кажется, работает медленно и приводит к вектору, который имеет два значения меньше, чем следовало бы.

Может кто-нибудь сказать, есть ли проблема с моей попыткой использовать sapply() и tryCatch() - или более вероятно, что эта проблема связана с какой-то аномалией в моих текстовых файлах?

Кроме того, если у кого-нибудь есть альтернативные способы быстрого чтения в первой строке большого количества текстовых файлов, эти предложения будут очень благодарны.

Использование sapply ()

firstline<-function(x){
    tryCatch({
     y<-fread(x,nrow=1, fill=T, header = F, sep = "")
    },
    error=function(e){
      i<-match(x,files26)
      cat("On iteration ",i,"ERROR :",conditionMessage(e), "\n")
     y<<-"<ERROR>" 
    })
    return(y)
  }

  flines26<-unlist(sapply(files26,firstline))

Использование цикла For

  flines26<-c()
  errors<-c()

  for (i in 1:length(files26)){
    tryCatch({
       flines26[i]<-fread(files26[i],fill=T,nrow=1, header = F, sep = "")
    },
    error=function(e){
      cat("On iteration ",i,"ERROR :",conditionMessage(e), "\n")
      errors<<-c(errors,i)
      flines26[i]<<-"<ERROR>"
    })
  } 

Спасибо!

...