R можно ли сделать этот код закрытия более эффективным?

Я полагался на эти сообщения 1 и 2 тяжело придумать следующий код закрытия. Код отлично работает со сжатым xml размером 1,3 ГБ (фактический размер 13,5 ГБ). Однако для получения окончательного результата требуется примерно около 10 часов. Я рассчитал код, и функция закрытия занимает примерно 9,5 часов из 10 часов (поэтому я публикую только соответствующую часть кода закрытия). Учитывая это, есть ли способ еще больше ускорить этот код? Может ли распараллеливание прийти мне на помощь? Вот очень небольшой образец данных.

ОБНОВЛЕНИЕ: ссылки на 25 % выборочных данных и 100 % население.

library(XML)

branchFunction <- function() {
  store <- new.env() 
  func <- function(x, ...) {
    ns <- getNodeSet(x,path = "//person[@id]|//plan[@selected='yes']//*[not(self::route)]")
    value <- lapply(ns, xmlAttrs)
    id <- value[[1]]
    store[[id]] <- value
  }
  getStore <- function() { as.list(store) }
  list(person = func, getStore=getStore)
}

myfunctions <- branchFunction()

xmlEventParse(file = "plansfull.xml", handlers = NULL, branches = myfunctions)

#to see what is inside
l <- myfunctions$getStore()
l <- unlist(l, recursive = FALSE)

person dataanalyst    schedule 22.03.2016    source источник
comment
Что говорит профилирование кода? Вот приведены несколько примеров того, как профилировать код и находить узкие места. Само собой разумеется, что без файла xml нам очень трудно увидеть и устранить узкие места.   -  person Roman Luštrik    schedule 22.03.2016
comment
Спасибо, что прислали мне ресурс Роман. Хотя я не знал об этом ресурсе заранее, я использовал proc.time() для определения времени различных частей моего кода, и приведенная выше часть занимает больше всего времени. Разве это не хороший способ проверить узкие места в коде? Я также хочу отметить, что уже некоторое время я безуспешно работал над чтением этого огромного xml, пока не нашел синтаксический анализатор SAX. Приведенный выше код — единственный, который работал со всем набором данных. Ни одна из моих ранних версий (с использованием стиля DOM) не работала с полным набором данных.   -  person dataanalyst    schedule 22.03.2016
comment
Вот 25% и < наборы данных href="https://www.dropbox.com/s/d8dtw10abbiuca6/300.plans.xml.gz?dl=0" rel="nofollow noreferrer">100%. Тот же код занимает около 0,4 часа для выборки 25%, но занимает около 9,4 часа для 100% населения.   -  person dataanalyst    schedule 22.03.2016
comment
Попробуйте lineprof, он также отображает узкие места.   -  person Roman Luštrik    schedule 22.03.2016
comment
В порядке. Позвольте мне попробовать. Кстати, можете ли вы сказать мне, растут ли объекты в функции, которую я написал выше? Я читал, что замыкания пытаются избежать растущих объектов, но я не совсем уверен в их внутренней работе.   -  person dataanalyst    schedule 22.03.2016
comment
@RomanLuštrik Можете ли вы сообщить мне, можно ли распараллелить xmlEventParse или нет?   -  person dataanalyst    schedule 23.03.2016
comment
Я не знаком с этой функцией, и мне придется копаться во внутренней работе, что я в настоящее время не могу сделать из-за нехватки времени, извините. Надеюсь, кто-то еще сможет поучаствовать.   -  person Roman Luštrik    schedule 23.03.2016
comment
Вы удалили данные из папки БД?   -  person tchakravarty    schedule 25.03.2016
comment
Ага. Я удалил его. Могу загрузить, если хотите попробовать. Я только что перешел на SAXON XSLT, так как R не может обрабатывать большие xml-файлы.   -  person dataanalyst    schedule 29.03.2016