我在适用于df的大型脚本中使用hclust函数,例如本示例:
HClust <- hclust(d = dist(model.matrix(~-1 + A + B + C + D, df))^2, method = "centroid")
我只想在df中指定一次变量,例如。 MgO,Zn,CaO ...,当我调用hclust()时,我想自动添加它们。
我尝试创建一个 vector ,该 vector 将包含hclust调用将使用的格式的dataframe变量。但是生成的树状图是不正确的。
vars_for_clust <- paste(colnames(df),"+")
它给出了以下内容:
vars_for_clust
[1] "A+" "B+" "C+"
并在hclust调用中使用了此 vector :
HClust <- hclust(d = dist(model.matrix(~-1 + vars_for_clust, df))^2, method = "centroid")
但是出了点问题,因为即使没有出错,生成的树状图也不正确(所有垂直线都相等)
谢谢!!
样本数据在:
https://github.com/esteful/kaixo
最佳答案
这里有两个问题:1.您使用paste
和2.您使用vars_for_clust
作为model.matrix
的参数。
要获得所需的内容,您应该将整个公式构造为字符串,然后将其转换为公式-如下所示:
(FormString <- paste(c("~ -1", colnames(df)), collapse=" + "))
[1] "~ -1 + A + B + C"
HClust <- hclust(d = dist(model.matrix(as.formula(FormString), df))^2, method = "centroid")