我的问题(今天)如下:
我在文本格式的文件(“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超过 65536") 中的错误:需要 TRUE/FALSE 的缺失值”。
有人可以帮帮我吗?