Чтение XML-файлов в R зацикливается на сбоях

У меня есть код, который перебирает список файлов xml и обрабатывает их. Когда я выполняю код для одного xml, результат является ожидаемым. Но когда я запускаю цикл, в разных файлах возникают непредвиденные ошибки. Файл ошибки изменяется на каждой итерации, поэтому нет шаблона для поиска ошибки.

Бывший. отдельный файл:

p_xml <- function(file)
{
   tmp<-tryCatch(
  {
    (read_xml(path_XML))
  },error=function(e)
  {
    return(NA)
   })

 if(is.na(tmp))
   {
    file <- read_xml(path_XML, encoding = "ISO-8859-1")
  }else{
   file <- tmp
 }
 id <- as.numeric(xml_attr(file, "id"))
 year_id <- as.numeric(xml_attr(file, "machine_year"))

....

return(data)

}

Этот код правильно возвращает таблицу data.table. Но если я выполню эту функцию внутри цикла:

global_dt<-data.table()
for(j in 1:length(file_names))
  {
    current_file <- file_names[j]
    f <- p_xml(file.path(current_dir,current_file))
    global_dt<-rbind(global_dt,f)
  }

Я получаю такую ​​ошибку:

  • Ошибка в doc_parse_file (con, encoding = encoding, as_html = as_html, options = options): не удалось проанализировать /path/file.xml *

Дело в том, что если я затем выполню единственный код с неудачным файлом, он вернет то, что я ожидал. Я использую библиотеку xml2 для чтения файлов


person aserrin55    schedule 25.03.2019    source источник


Ответы (1)


попробуйте этот рабочий процесс

library(data.table)
#store the result of each run of the function into a list
l <- lapply( list_files, p_xml )
#rowbind the list together into one data.table
global_dt <- data.table::rbindlist( l ) 
person Wimpel    schedule 25.03.2019
comment
Спасибо за ответ. Ошибка сохраняется с другим файлом. Ошибка та же, но я могу обновить с помощью 3 предупреждений: Дополнительно: Предупреждающие сообщения: 1: В doc_parse_file (con, encoding = encoding, as_html = as_html, options = options): Слишком много открытых файлов [1518] 2: В doc_parse_file (con, encoding = encoding, as_html = as_html, options = options): Слишком много открытых файлов [1518] 3: В doc_parse_file (con, encoding = encoding, as_html = as_html, options = options): - person aserrin55; 25.03.2019