2017-10-14 51 views
0

我正在嘗試做一些分組並遇到此錯誤。「樹」的「高度」組件未排序在cutree中的錯誤

Evaluation error: the 'height' component of 'tree' is not sorted (increasingly).

我輸入的是:

library(stringdist) 
name <- c("luke,abcdef","luke,abcdeh","luke,abcdeg") 
a<-stringdistmatrix(name, method="jw") 
clusts <- hclust(a, method="ward.D2") 

但是,當我試圖削減它,它給了我一個錯誤:

> cutree(clusts, h = 0.155) 
Error in cutree(clusts, h = 0.155) : 
    the 'height' component of 'tree' is not sorted (increasingly) 

但是,如果使用

a<-stringdistmatrix(name, method="jw", p=0.05) 

曾經一切正常。

我找了一個解決方案,找不到一個。 我應該怎麼做,以防止這種情況發生並保持其正常工作?

我也注意到,如果我有相同的距離矩陣,而是用手工生成的(所以在集羣中沒有距離參數。

+0

如果你看看'diff(clusts $ height)'這兩個例子,那麼第一個就是一個微小的負數,第二個恰好爲零。基本上問題是,在這種簡單的情況下,所有的距離都是相同的,但由於二進制表示的十進制數不完美,因此存在小的舍入差異。我不認爲你會用更多不同的字符串來解決這個問題。 –

+0

所以這是一個特定的問題,是隨機發生的,因爲我不走運,可以這麼說嗎?問題是,即使這些名稱不是我的實際名稱,這些名稱和我的實際名稱之間的距離也是相同的(因爲某種原因選擇了它們)。有沒有辦法讓它自動工作?因爲我需要我的算法來處理所有情況,即使是這些不幸的情況也是如此。所以,如果我保留這些相同的字符串,我可以做任何事情嗎? – Ravonrip

+0

你可以嘗試計算clusts後四捨五入 - 試試'clusts $ height < - round(clusts $ height,6)' –

回答

1

如果你比較diff(clusts$height)這兩個例子,第一個出來作爲一個微小的負數,第二個爲精確爲零。所以,問題是由二進制表示舍入值的差異應該是相等造成的。

應該,如果你計算clusts後工作輪的高度...

clusts$height <- round(clusts$height, 6)