Yaklaşık 35.000 satır olan 7 sütuna sahip bir veri çerçevem var. Bu gibi görünüyor:lapply ve do.call çok yavaş koşuyor mu?
kafa (nük)
chr feature start end gene_id pctAT pctGC length
1 1 CDS 67000042 67000051 NM_032291 0.600000 0.400000 10
2 1 CDS 67091530 67091593 NM_032291 0.609375 0.390625 64
3 1 CDS 67098753 67098777 NM_032291 0.600000 0.400000 25
4 1 CDS 67101627 67101698 NM_032291 0.472222 0.527778 72
5 1 CDS 67105460 67105516 NM_032291 0.631579 0.368421 57
6 1 CDS 67108493 67108547 NM_032291 0.436364 0.563636 55
gene_id yaklaşık 3.500 benzersiz düzeyi vardır bir etkendir. Her bir gen_id seviyesi için min(start)
, max(end)
, mean(pctAT)
, mean(pctGC)
ve sum(length)
'u almak istiyorum.
Bunun için lapply ve do.call kullanmayı denedim, ancak sonsuza dek sürmesi +30 dakika sürüyor. kullanıyorum kodudur:
nuc_prof = lapply(levels(nuc$gene_id), function(gene){
t = nuc[nuc$gene_id==gene, ]
return(list(gene_id=gene, start=min(t$start), end=max(t$end), pctGC =
mean(t$pctGC), pct = mean(t$pctAT), cdslength = sum(t$length)))
})
nuc_prof = do.call(rbind, nuc_prof)
Ben bu yavaşlatmak yanlış bir şey yapıyorum eminim. Daha hızlı olabileceğinden emin olmak için beklemedim. Herhangi bir fikir? Büyük nesnelerde son derece yavaş olabilir
Kullanım 'tapply' - Bu hızlı olabilir. – Andrie