谢老大的电脑果然比我的快,能跑到0!
<br />
seqStr <- paste(sample(c("A", "T", "C", "G"), 3e6, TRUE), collapse = "")<br />
system.time({<br />
seqChar = strsplit(seqStr, "")[[1]]<br />
seqName = c(A = 1, T = 2, C = 3, G = 4)<br />
seqNum = seqName[seqChar]<br />
seqSwitch = ifelse(seqNum%%2 == 0, seqNum - 1, seqNum + 1)<br />
seqResChar = names(seqName)[seqSwitch]<br />
seqResStr = paste(seqResChar, collapse = "")<br />
}) <br />
# user system elapsed <br />
# 5.860 0.210 6.459 <br />
我也学谢老大来变变“魔术”(经老大提醒,此处代码有错误,不能正确处理反转,正确代码见9楼后文):
<br />
reverseAndComplement <- function(strseq, doReverse = T, doComplement = T) {<br />
if (!doReverse) rev <- c<br />
ifelse(doComplement, paste(c(A = 'T', T = 'A', C = 'G', G = 'C')[rev(strsplit(toupper(strseq),"")[[1]])], collapse = ""), rev(s))<br />
} <br />
system.time(reverseAndComplement(seqStr))<br />
# user system elapsed <br />
# 0.900 0.000 0.902 <br />
似乎能稍微快点。