Rで、リストをハッシュテーブルに変換し、特定の基準に従って類似した要素をグループ化する方法を探しています。特定の比較基準に従ってリストをソートします。R
詳細は、以下で説明するように「グラフ理論」に特有ですが、答えはいくつかの特定の基準に基づいてハッシュする一般的な手順だと思います。
リストは、(igraphパッケージの)「グラフ」オブジェクトで構成されています。
library(igraph)
#Creating the list of graphs
edgeList <- data.frame(
idA=c(008, 001, 001, 010, 047, 002, 005, 005),
idB=c(100, 010, 020, 030, 030, 001, 011, 111)
)
edgeList$idB= edgeList$idB+0.1
g <- graph_from_data_frame(edgeList, directed = TRUE)
g_list <- decompose(g, mode = "weak")
#from the 8 edges we obtain 5 graphs (connected components of the original graph)
類似性基準は、グラフは同型でなければならないということです。
isomorphic(g_list[[1]],g_list[[4]])
私はハッシュテーブルにg_list
内の要素のインデックスをハッシュするにはどうすればよいですか?
この玩具例えば予想される結果は次のようになります
g_inded_hash
[[1]]
[1] 1 4
[[2]]
[1] 2 5
[[3]]
[1] 3
(必ずしもリストが、いくつかのデータ構造グループグラフ(1,4)及び(2,5)に類似している)
実際には、私は同形にしたがってグループ化する必要がある4000万(小さな)のグラフを持っています。
検索の結果、答えがパッケージまたはenvironmentに関連している必要があることが判明しましたが、その解決策には対応できませんでした。
EDIT:directed = TRUE
をgraph_from_data_frame()
に変更しました。
私はigraph' 'に慣れていないよ(ので、いくつかの組み込みツールは、このタスクのために存在している場合があります)しかし、あなたはより一般的な何かについて言及するので、あなたは(1)(combn''ですべてのペアごとの比較を作ることができます2)前の結果から "dist"オブジェクトを作成し、(3)このオブジェクトと組み込みRツールを使用してクラスタを作成する。私。 'split(seq_along(g_list)、cutree(hclust(structure)' combn(g_list、2、function(x)isomorphic(x [[1])、x [[2]]))、class = "dist"、Size =長さ(g_list)))、h = 0.5)) ' –
tks。私は〜40millionのグラフを持っているので、ペアワイズの比較はO(n^2)となるので質問から外れています(答えは討論を参照してください)。ハッシュテーブルの素敵な特性は、各新しい要素(グラフ)が各グループの1つの要素に対してのみ比較されるということです。より多くの要素がグループ化されるにつれ、残りの比較の数は速く減少します – LucasMation