【问题标题】:Reading an upper triangular distance matrix and generating a dendrogram in R读取上三角距离矩阵并在 R 中生成树状图
【发布时间】:2020-02-17 01:17:13
【问题描述】:

我的问题(今天)如下:

我在文本格式的文件(“dist.dis”)中有一个上对角距离矩阵(由第三方程序生成),我想将其读入 R 以计算聚类分析并生成树状图:

   0.36364   0.36364   0.27273   0.81818   0.54545   0.63636   0.36364   0.45455
   0.18182   0.63636   0.63636   0.36364   0.63636   0.54545   0.09091
   0.45455   0.63636   0.18182   0.63636   0.54545   0.27273
   0.81818   0.63636   0.81818   0.27273   0.72727
   0.45455   0.18182   0.63636   0.54545
   0.45455   0.54545   0.27273
   0.81818   0.54545
   0.45455

在一个单独的文本文件(“dist.nam”)中,我还有一个已计算距离的对象名称列表:

COOKO-A
COOKO-B
COOKO-C
COOKO-D
COOKO-E
COOKO-F
COOKO-G
COOKO-H
COOKO-I

这是我读取上述矩阵并生成树状图的 R 代码:

mat <- matrix(0, 9, 9)
mat[row(mat) >= col(mat)] <- scan("dist.dis")
hc <- hclust(as.dist(mat), method="average")
ppi <- 100
png("clus.png", width=6*ppi, height=6*ppi, res=ppi)
plot(as.dendrogram(hc), xlab="Distance", ylab="", main="UPGMA dendrogram", horiz=TRUE, edgePar=list(col="blue", lwd=3))
dev.off()

此代码有效,并生成以下树状图:

但是,我想在树状图的尖端显示对象的名称(而不是它们的编号)。为此,我尝试了以下代码:

names <- scan("dist.nam", what="character")
df.dist <- as.dist(mat)
df.dist <- as.matrix(df.dist, labels=TRUE)
colnames(df.dist) <- names
rownames(df.dist) <- names
hc <- hclust(as.dist(mat), method="average")

但后来我得到了一个可怕的错误:“if (is.na(n) || n > 65536L) stop("size cannot be NA or beyond 65536") 中的错误:需要 TRUE/FALSE 的地方缺少值”。

有人可以帮帮我吗?

【问题讨论】:

    标签: r cluster-analysis distance-matrix


    【解决方案1】:

    我怀疑这与将hclust 与矩阵一起使用而不是dist 对象有关。

    我会更改矩阵的名称mat,然后使用as.dist(请注意,您实际上只需要设置colnames,而不是同时设置行和列)。让我知道这是否适合您。

    mat <- matrix(0, 9, 9)
    mat[row(mat) >= col(mat)] <- scan("dist.dis")
    
    names <- scan("dist.nam", what="character")
    
    colnames(mat) <- names
    
    df.dist <- as.dist(mat)
    
    hc <- hclust(df.dist, method="average")
    ppi <- 100
    png("clus.png", width=6*ppi, height=6*ppi, res=ppi)
    par(mar=c(4,4,4,4))
    plot(as.dendrogram(hc), xlab="Distance", ylab="", main="UPGMA dendrogram", horiz=TRUE, edgePar=list(col="blue", lwd=3))
    dev.off()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-17
      • 1970-01-01
      • 2017-05-15
      • 2018-02-25
      • 2017-12-10
      • 2017-01-07
      • 1970-01-01
      • 2023-03-10
      相关资源
      最近更新 更多