有没有办法可以使用R找到一对核苷酸序列的可变位点数以及哪些位点可变?
例如。
Seq1=ATGCCCCGTAATGC
Seq2=AGGCAACGTAAAGC
我希望变量站点的数量为5,位置2,3,5,6,12为变量。 有没有办法在R?中做到这一点?
答案 0 :(得分:1)
library(Biostrings)
s1 <- as.integer(DNAString(Seq1))
s2 <- as.integer(DNAString(Seq2))
which(s1!=s2)
#[1] 2 5 6 12
Seq1 <- paste(rep(Seq1,1e6), collapse='')
Seq2 <- paste(rep(Seq2,1e6), collapse='')
f1 <- function(){a <- unlist(strsplit(Seq1, ""))
b <- unlist(strsplit(Seq2, ""))
which(a!=b)}
f2 <- function(){s1 <- as.integer(DNAString(Seq1))
s2 <- as.integer(DNAString(Seq2))
which(s1!=s2)}
library(microbenchmark)
microbenchmark(f1(), f2(), unit='relative', times=20L)
#Unit: relative
#expr min lq mean median uq max neval cld
#f1() 5.06205 5.180931 4.480188 4.633281 4.749703 2.365516 20 b
#f2() 1.00000 1.000000 1.000000 1.000000 1.000000 1.000000 20 a
Seq1 <- 'ATGCCCCGTAATGC'
Seq2 <- 'AGGCAACGTAAAGC'
答案 1 :(得分:0)
不确定 Biostrings 是否对内存优化有任何好处。您只需将 strsplit 用于短序列:
Seq1="ATGCCCCGTAATGC"
Seq2="AGGCAACGTAAAGC"
a <- unlist(strsplit(Seq1, ""))
b <- unlist(strsplit(Seq2, ""))
which(a!=b)
#[1] 2 5 6 12