Ich habe einen Datenrahmen, der etwa 35.000 Zeilen ist, um 7 Spalten. es sieht wie folgt aus:lapply und do.call läuft sehr langsam?
Kopf (Nuk)
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 ist ein Faktor, der etwa 3.500 einzigartige Levels hat. Ich möchte für jede Ebene von gen_id die min(start)
, max(end)
, mean(pctAT)
, mean(pctGC)
und sum(length)
bekommen.
Ich habe versucht, mit lapply und do.call dafür, aber es dauert ewig +30 Minuten zu laufen. der Code Ich verwende ist:
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)
Ich bin sicher, dass ich diese etwas falsch zu verlangsamen mache. Ich habe nicht darauf gewartet, dass es fertig ist, da ich mir sicher bin, dass es schneller gehen kann. Irgendwelche Ideen?
Verwenden 'tapply' - dies schneller sein könnte. – Andrie