Использование clvalid в r получение ошибки в cutree.default (clusterobj, nc): функция cutree доступна только для объектов hclust / dendrogram / phylo

Использование набора данных по умолчанию из 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")

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

Error in cutree.default(clusterObj, nc) :
Function cutree is only available for hclust/dendrogram/phylo objects only.

2
0
249
1

Ответы 1

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

РЕДАКТИРОВАТЬ: эта проблема наблюдалась в 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
  • Я разветвил репозиторий github clValid (из CRAN) и внес в код необходимые небольшие изменения. Вы можете установить эту версию с devtools::install_github("GillesSanMartin/clValid"). У меня работает и при загрузке dendextend.

В последней версии dendextend эта проблема исправлена ​​(версия 1.10.0, см .: github.com/talgalili/dendextend/issues/90. Спасибо за отчет об ошибке)

Tal Galili 08.02.2019 09:59

Другие вопросы по теме