[英]DNA pairwise distances from R matrix
在使用DNA时,我们通常需要三角形的p距离矩阵,该矩阵包含序列对之间不同位点的比例。 从而:
产量:
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.