मैं एक फास्टा फ़ाइल से पढ़ने वाले डीएनए तारों के लिए जीसी सामग्री की गणना करने के लिए एक तेज़ तरीका ढूंढ रहा हूं। यह एक स्ट्रिंग लेने और 'जी' या 'सी' अक्षर प्रकट होने की संख्या की गिनती करने के लिए उबलता है। मैं विचार करने के लिए पात्रों की सीमा भी निर्दिष्ट करना चाहता हूं।एक स्ट्रिंग को विभाजित करने और आर का उपयोग कर वर्णों को गिनने का तेज़ तरीका?
मेरे पास एक कामकाजी फ़ंक्शन है जो काफी धीमा है, और यह मेरे कोड में बाधा उत्पन्न कर रहा है। यह इस तरह दिखता है:
> a = "GCCCAAAATTTTCCGGatttaagcagacataaattcgagg"
> Rprof(filename="Rprof.out")
> for(i in 1:500000){gcCount(a,1,40)};
> Rprof(NULL)
> summaryRprof(filename="Rprof.out")
self.time self.pct total.time total.pct
"gcCount" 77.36 76.8 100.74 100.0
"==" 18.30 18.2 18.30 18.2
"strsplit" 3.58 3.6 3.64 3.6
"+" 1.14 1.1 1.14 1.1
":" 0.30 0.3 0.30 0.3
"as.logical" 0.04 0.0 0.04 0.0
"as.character" 0.02 0.0 0.02 0.0
$by.total
total.time total.pct self.time self.pct
"gcCount" 100.74 100.0 77.36 76.8
"==" 18.30 18.2 18.30 18.2
"strsplit" 3.64 3.6 3.58 3.6
"+" 1.14 1.1 1.14 1.1
":" 0.30 0.3 0.30 0.3
"as.logical" 0.04 0.0 0.04 0.0
"as.character" 0.02 0.0 0.02 0.0
$sampling.time
[1] 100.74
तेजी से इस कोड को बनाने के लिए किसी भी सलाह:
##
## count the number of GCs in the characters between start and stop
##
gcCount <- function(line, st, sp){
chars = strsplit(as.character(line),"")[[1]]
numGC = 0
for(j in st:sp){
##nested ifs faster than an OR (|) construction
if(chars[[j]] == "g"){
numGC <- numGC + 1
}else if(chars[[j]] == "G"){
numGC <- numGC + 1
}else if(chars[[j]] == "c"){
numGC <- numGC + 1
}else if(chars[[j]] == "C"){
numGC <- numGC + 1
}
}
return(numGC)
}
Rprof चल रहा है मेरा पीछा उत्पादन देता है?
क्या इसके लायक है के लिए, मैं निर्णय लेने से है कि आर कुल मिलाकर भी ~ 3 अरब कार्रवाई करने के लिए धीमी थी समाप्त हो गया
यहां सी ++ कोड है मानव जीनोम से बेसपियर और इसके बजाय थोड़ा पर्ल स्क्रिप्ट का इस्तेमाल किया। – chrisamiller