簡體   English   中英

在 R 中使用 clValid 在 cutree.default(clusterObj, nc) 中獲取錯誤:函數 cutree 僅適用於 hclust/dendrogram/phylo 對象

[英]Using clValid in R getting Error in cutree.default(clusterObj, nc) : Function cutree is only available for hclust/dendrogram/phylo objects only

使用 Brock 等人的默認數據集,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) 中的錯誤:
函數 cuttree 僅適用於 hclust/dendrogram/phylo 對象。

問題似乎來自這樣一個事實,即stats::cutree在加載包dendextend后被dendextend::cutree屏蔽,並且dendextend::cutree不適用於使用cluster包的某些函數生成的對象,如dianaagnes (而stats::cutree工作正常)。

編輯:這個問題是在dendextend 1.9.0 中觀察到的,但在報告錯誤后,包作者很快就修復了。 新版本 1.10.0 與cluster和 CRAN 的clValid版本完美配合。 它可以通過以下方式安裝: 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似乎是孤立的,因此不可能要求開發人員更改代碼(或者我錯了嗎?)。

解決方案:

  • 不要同時使用dendextendclValid
  • 不使用agnesdianaclMethods的說法clValid
  • 我已經分叉了clValid github 存儲庫(來自 CRAN)並在代碼中進行了必要的小改動。 您可以使用devtools::install_github("GillesSanMartin/clValid")安裝此版本。 當加載dendextend時,它也適用於我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM