Использование clValid в R приводит к ошибке в cutree.default (clusterObj, nc): функция cutree доступна только для объектов hclust / dendrogram / phylo - PullRequest
0 голосов
/ 13 сентября 2018

Используя набор данных по умолчанию из Brock et al., 2008

install.packages("clValid", dependencies = TRUE)
library(clValid)
data("mouse")
express <- mouse[, c("M1", "M2", "M3", "NC1", "NC2", "NC3")]
rownames(express) <- mouse$ID
intern <- clValid(express, 2:6, clMethods = c("hierarchical", "kmeans", "diana", "fanny", 
"som", "pam", "sota", "clara", "model"), validation = "internal")

и получая следующее:

Ошибка в cutree.default (clusterObj, nc):
Функция cutree доступна только для объектов hclust / dendrogram / phylo.

1 Ответ

0 голосов
/ 07 февраля 2019

Похоже, проблема в том, что stats::cutree маскируется dendextend::cutree после загрузки пакета dendextend и что dendextend::cutree не работает для объектов, сгенерированных некоторыми функциями пакета cluster, такими какdiana и agnes (пока stats::cutree работает нормально).

EDIT : эта проблема наблюдалась с dendextend 1.9.0, но была очень быстро исправлена ​​автором пакета после сообщения об ошибке .Новая версия 1.10.0 прекрасно работает с cluster и clValid версией из CRAN.Он может быть установлен через: devtools::install_github("talgalili/dendextend")

Это лучшее решение сейчас.Ниже я приведу оставшуюся часть моего первоначального ответа только для архивов.


Некоторый код для проверки этого (все прекрасно работает без dendextend, но загрузка dendextend вызывает сообщение об ошибке:

# detach(package:dendextend)
# library(dendextend)
# 
library(cluster)
d <- iris[,-5]
cl <- diana(dist(d))
cutree(cl, 3)
cl <- agnes(dist(d))
cutree(cl, 3)

library(clValid)
intern <- clValid(d, 2:10,
                  clMethods = c("hierarchical", "kmeans", "diana", "fanny",
                                "model", "pam", "agnes"),
                  method = "ward", validation = "internal")

К сожалению clValid кажется осиротевшим, поэтому невозможно попросить разработчика изменить код (или я ошибаюсь?).

Решения:

  • не использовать dendextend и clValid одновременно
  • не использовать agnes и diana в аргументе clMethods clValid
  • У меня естьразветвил репозиторий clValid github (из CRAN) и внес небольшие изменения, необходимые в коде. Вы можете установить эту версию с devtools::install_github("GillesSanMartin/clValid"). Она работает и у меня, когда загружен dendextend.
...