Tôi có một khung dữ liệu có khoảng 35.000 hàng, bởi 7 cột. nó trông như thế này:lapply và do.call chạy rất chậm?
đầu (nuc)
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 là một yếu tố, đó có khoảng 3.500 mức độ độc đáo. Tôi muốn, đối với mỗi cấp độ gen_id có được min(start)
, max(end)
, mean(pctAT)
, mean(pctGC)
và sum(length)
.
Tôi đã thử sử dụng lapply và do.call cho việc này, nhưng sẽ mất vĩnh viễn +30 phút để chạy. mã tôi đang sử dụng là:
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)
Tôi chắc chắn mình đang làm điều gì đó sai để làm chậm việc này. Tôi đã không chờ đợi nó để kết thúc như tôi chắc chắn nó có thể được nhanh hơn. Bất kỳ ý tưởng?
Sử dụng 'tapply' - điều này có thể được nhanh hơn. – Andrie