月珥 完了我觉得我的C思想已经根深蒂固了。看到这贴首先想到的是: 直接把每个ATCG直接储存成两位二进制数,比如说令A=00,T=10,C=01,G=11,然后合并起来,得到一个00100111...这样的二进制链,最后每隔一位取反就行…… 不知R里头做类似的工作方便不……
winthander 请问一下给位老大,谢老大在三楼的程序中 [seqStr = paste(sample(c("A", "T", "C", "G"), 3e+06, TRUE), collapse = "") seqChar = strsplit(seqStr, "")[[1]]] 先paste后strsplit得到list, 如果直接使用[sample(c("A", "T", "C", "G"), 3e+06, TRUE)]得到的向量好像也可以用于分析,为什么呢
aubonj 来拜读一下,学习了。 可是还是有些云里雾里的,各位老大能推荐一下哪里可以补补课,怎样将显性循环替换为高效的R语句。。。 我经常是写出好几个for的嵌套,或者需要进行场景的步进模拟和monte carlos,于是那个运算就非常耗时了。。。先谢谢了!![s:19]
enthumelon 回复 第21楼 的 月珥:你的思路我总结下: 1. ACGT的字符编码就用十进制表示: 0,1,2,3(文本替换就行了,纯粹R的操作嘛,干脆转为factor); 2. 然后转码后用sfsmisc:::digitsBase做成0-1向量合并成矩阵; 3 用1减去偶数项再转义成ACGT。 这样做的话,在C里面做取反自然快(算法复杂度在O(N)),在R里面嘛...不是个好思路。 因为无非就是字符转换,基因文件处理时(如果太大了)可以分段将文件读入内存(一次放不进内存的情况多了去了),然后做脚标操作即可(虽然算法复杂度也是O(N),但肯定N钱的常数要大些,因为要记录和替换脚标)。