2017-10-14 23 views
0

いくつかのグループ化をしようとしていますが、このエラーが発生しています。'tree'の 'height'コンポーネントがソートされていません。cutreeのエラー

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

しかし、私はそれをカットしようとすると、それは私にエラー与える::

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

私の入力がある

> 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) 
を使用している場合

これまでythingはうまく動作します。

私は解決策を探していて見つからなかった。 これを防ぐため、どうすればよいですか?

私は(同じ距離行列を持っていますが、手によって生成された場合はそのクラスタには距離パラメータが存在しないこと、また気づいた。

+0

これらの2つの例で 'diff(clusts $ height)'を見ると、最初は小さな負数で、2番目は正確にゼロになります。基本的に問題は、この単純なケースではすべての距離は同じですが、10進数の不完全なバイナリ表現による小さな丸めの違いがあることです。私はあなたがより多様な文字列でこの問題を起こすとは思わない。 –

+0

それは具体的な問題です、私は不運なので、ランダムに発生した、いわば?問題は、これらの名前が私の実際の名前ではないにもかかわらず、これらの名前と私の実際の名前の間の距離が同じである(理由のために選択された)ことです。自動的に動作させる方法はありますか?私のアルゴリズムはすべての場合、これらのような不運なケースでも機能する必要があります。私はこれらの文字列を保持すれば、それについて何かできますか? – Ravonrip

+0

クラスタを計算した後、高さを丸めることができます。 'clusts $ height < - round(clusts $ height、6)'を試してください。 –

答えて

1

あなたはこの2つの例のためdiff(clusts$height)を比較すると、最初に出てきます小さな負の数、正確にゼロとしての第2のように。あなたはclustsを計算した後の高さを丸める場合、それは動作するはずの問題が等しくなるはずである値のバイナリ表現丸め差異に起因しているので。

...

clusts$height <- round(clusts$height, 6) 
関連する問題