Как создать вектор с переменными для использования в hclust

Я использую функцию hclust в большом сценарии, примененном к df, как в этом примере:

HClust <- hclust(d = dist(model.matrix(~-1 + A + B + C + D, df))^2, method = "centroid")

Я хотел бы указать только один раз переменные в df, например. MgO, Zn, CaO... и когда я вызываю hclust(), я бы хотел, чтобы они были автоматическими.

Я попытался создать вектор, который будет включать переменные фрейма данных в формате, который я буду использовать для вызова hclust. Но полученная дендрограмма неверна.

  vars_for_clust <- paste(colnames(df),"+") 

что дает следующее:

vars_for_clust
[1] "A+" "B+" "C+"

и использовал этот вектор в вызове hclust:

  HClust <- hclust(d = dist(model.matrix(~-1 + vars_for_clust, df))^2, method = "centroid")

но что-то пошло не так, потому что даже если он не выдает ошибку, полученная дендрограмма неверна (все вертикальные линии равны)

Спасибо!!

Примеры данных: https://github.com/esteful/kaixo.


person Esteful    schedule 19.01.2017    source источник
comment
Вы можете добавить образцы данных?   -  person Sandipan Dey    schedule 19.01.2017


Ответы (1)


Здесь есть две проблемы: 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")
person G5W    schedule 07.09.2017