Я полагался на эти сообщения 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)
lineprof
, он также отображает узкие места. - person Roman Luštrik   schedule 22.03.2016