Я бы рекомендовал профилировать функцию с помощью Rprof
или пакета profr
. Это покажет вам, где находится ваше узкое место, и тогда вы сможете подумать о том, как оптимизировать функцию или изменить способ ее использования.
Ваш пример paste
будет намного быстрее отчасти потому, что он векторизован. Для более справедливого сравнения вы можете увидеть разницу, зациклившись на paste
, как вы в настоящее время делаете с newXMLNode
, и посмотрите разницу во времени.
Изменить:
Вот результат профилирования вашего цикла с помощью profr
.
library(profr)
xml.prof <- profr(for(i in 1:N)
newXMLNode("Parameter", parent=seq, attrs=c(id=pars[i])))
plot(xml.prof)
Здесь нет ничего особенно очевидного в тех местах, где вы можете это улучшить. Я вижу, что она тратит разумное количество времени на функцию %in%
, поэтому ее улучшение приведет к некоторому сокращению общего времени (хотя вам все равно придется многократно повторяться, так что это не будет иметь большого значения) Лучшим решением было бы переписать newXMLNode
как векторизованную функцию, чтобы вы могли полностью пропустить цикл for
.