데이터 프레임이 약 35,000 행, 7 열입니다. 그것은 다음과 같습니다lapply 및 do.call이 매우 느리게 실행 중입니까?
머리 (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 약 3,500 고유의 수준이 요인이다. 각 수준의 gene_id에 대해 min(start)
, max(end)
, mean(pctAT)
, mean(pctGC)
및 sum(length)
을 얻으 려합니다.
나는 이것을 위해 lapply와 do.call을 사용해 보았지만, 실행하는데 영원히 +30 분이 걸렸다. 내가 사용하는 코드는 다음과 같습니다
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)
내가이 둔화 뭔가를 잘못하고 있어요 확신합니다. 나는 그것이 빨리 될 수 있다고 확신하기 때문에 그것이 끝날 때까지 기다리지 않았다. 어떤 아이디어?
사용'tapply' -이 빨리 될 수 있습니다. – Andrie