Tümünün en az bir satır içerdiğinden emin olduğum bir veri çerçeve listesi var (aslında, bazıları yalnızca bir satır içerir ve diğerleri belirli sayıda satır içerir) ve hepsinin aynı sütunlara sahip olması (isimler ve tipler). Durumun önemli olması durumunda, satırlarda hiçbir NA'nın bulunmadığından eminim. rbind.data.frame ürününün performansı
durum
böyle simüle edilebilir: onlar benim gerçek durumu yansıttığı böylece (randomizasyon) parametrelerini ayarlamak ettik#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),]})
.
Tüm bu veri çerçevelerini tek bir veri çerçevesinde birleştirmek istiyorum. Böyle, hile yapacağını rbind kullanarak düşündüm:
system.time(
result<-do.call(rbind, someParts)
)
Şimdi benim sistemde (özellikle yavaş değil) ve yukarıdaki ayarlarla bu system.time çıktısı alır:
user system elapsed
5.61 0.00 5.62
Rastgele 254 (benim durumumda) 200 değişkenli satır için yaklaşık 6 saniye? Şüphesiz, buradaki performansı iyileştirmenin bir yolu olmalı? Benim kodumda, sık sık benzer şeyleri yapmak zorundayım (bu, birden fazla ithamdan kaynaklanmaktadır), bu yüzden mümkün olduğunca hızlı olmak için buna ihtiyacım var.
, ben burada Dominik http://stackoverflow.com/questions/7224938/can-i-rbind-be-parallelized-in-r/8071176#8071176 bir teknik kullanılarak dataframes listesini kombine Olduğundan daha hızlıdır, daha büyük olduğu ve orijinal liste verisini faktörler yerine karakterlerle okuduğumda daha iyi bir performans buldu. Rbind kullanarak eşleşme çok zaman harcadı; Eklemek için faktör düzeylerini kontrol etmek için spekülasyon yapıyorum. – ARobertson