Производительность rbind.data.frame

У меня есть список фреймов данных, для которых я уверен, что все они содержат по крайней мере одну строку (на самом деле, некоторые содержат только одну строку, а другие содержат заданное количество строк), и что все они имеют одинаковые столбцы (имена и типы). В случае, если это имеет значение, я также уверен, что нигде в строках нет NA.

Ситуацию можно смоделировать так:

#create one row
onerowdfr<-do.call(data.frame, c(list(), rnorm(100) , lapply(sample(letters[1:2], 100, replace=TRUE), function(x){factor(x, levels=letters[1:2])})))
colnames(onerowdfr)<-c(paste("cnt", 1:100, sep=""), paste("cat", 1:100, sep=""))
#reuse it in a list
someParts<-lapply(rbinom(200, 1, 14/200)*6+1, function(reps){onerowdfr[rep(1, reps),]})

Я установил параметры (рандомизации) так, чтобы они приближались к моей истинной ситуации.

Теперь я хочу объединить все эти кадры данных в одном кадре данных. Я подумал, что использование rbind поможет, например, так:

system.time(
result<-do.call(rbind, someParts)
)

Теперь, в моей системе (что не особенно медленно), и с настройками, указанными выше, требуется вывод system.time :

   user  system elapsed 
   5.61    0.00    5.62

Почти 6 секунд для повторного связывания 254 (в моем случае) строк из 200 переменных? Конечно, должен быть способ улучшить производительность здесь? В моем коде мне приходится делать подобные вещи очень часто (это результат многократного вменения), поэтому мне нужно, чтобы это было как можно быстрее.

8
задан Nick Sabbe 12 May 2011 в 15:13
поделиться