【发布时间】: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