DNA成对距离R矩阵

时间:2014-03-18 20:03:58

标签: r matrix distance identity dna-sequence

使用DNA时,我们经常需要三角形p距离矩阵,其中包含序列对之间不相同位点的比例。因此:

  1. AGGTT
  2. AGCTA
  3. AGGTA
  4. 收率:

          1    2
    2   0.4
    3   0.2  0.2
    

    p距离计算在某些R包中可用,但假设我需要使用数字代码(-1,0,1,2),而不是字母(C,T,A,G)。如何从" my.matrix"生成三角p距离矩阵?

    # Define DNA matrix dimensions
    bp = 5  # DNA matrix length
    n  = 3  # DNA matrix height
    # Build Binary Matrices
    purine <- matrix(sample(0:1,(bp*n),replace=TRUE,prob=c(0.5,0.5)),n,bp)
    ketone <- matrix(sample(0:1,(bp*n),replace=TRUE,prob=c(0.5,0.5)),n,bp)
    strong <- 1-(abs(purine-ketone))
    my.matrix <- (purine*strong-ketone)+(purine*ketone-strong)+purine+ketone
    my.matrix
    

1 个答案:

答案 0 :(得分:1)

我不确定你在使用my.matrix做什么,但这应该适用于字符或数字

x<-c("AGGTT", "AGCTA", "AGGTA")
y<-do.call("rbind", strsplit(x, "")) 
y
     [,1] [,2] [,3] [,4] [,5]
[1,] "A"  "G"  "G"  "T"  "T" 
[2,] "A"  "G"  "C"  "T"  "A" 
[3,] "A"  "G"  "G"  "T"  "A" 
z <- apply(y, 1, function(x) colMeans(x != t(y)) )
z
     [,1] [,2] [,3]
[1,]  0.0  0.4  0.2
[2,]  0.4  0.0  0.2
[3,]  0.2  0.2  0.0

如果需要,您可以使用lower或upper.tri来获取三角形。此外,如果apply函数看起来令人困惑,它只是将这个函数应用于所有三行...

y[1,] == t(y)
     [,1]  [,2]  [,3]
[1,] TRUE  TRUE  TRUE
[2,] TRUE  TRUE  TRUE
[3,] TRUE FALSE  TRUE
[4,] TRUE  TRUE  TRUE
[5,] TRUE FALSE FALSE

...这将返回距离矩阵

中的第一行
colMeans(y[1,] != t(y))
[1] 0.0 0.4 0.2