簡體   English   中英

DNA與R矩陣的成對距離

[英]DNA pairwise distances from R matrix

在使用DNA時,我們通常需要三角形的p距離矩陣,該矩陣包含序列對之間不同位點的比例。 從而:

  1. AGGTT
  2. AGCTA
  3. AGGTA

產量:

      1    2
2   0.4
3   0.2  0.2

在某些R包中可以使用p距離計算,但是假設我需要使用數字代碼(-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

我不確定您在使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM