我在适用于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")

09-26 13:29