3

私はgames[、]と呼ばれる整数のNx2テーブルを持っています。ノード/エッジのテーブルはグラフに変換されます。

net <- graph.data.frame(as.data.frame(games), directed=FALSE)
deg.net <- degree(net, mode='total', loops=FALSE) 

(すべてのオプションが必要なわけではないことを理解しています。)

私が抱えている問題は、次数の分布が学位内のみであるように見えることです。たとえば、gamesファイルには次の行があります。

103 86
24 103
103 2
92 103
87 103
103 101
103 44

それでも、igraphは、ノード103の次数が「7」であるはずなのに「3」であることを示しています。

私が欠けているものについての洞察をいただければ幸いです。

4

2 に答える 2

6

覚えておくべきことの1つは、ほとんどのigraph関数は、IDによって頂点を参照することです。IDは、0からN-1までの単純な整数です。ここで、Nはグラフ内の頂点の数です。整数のNx2テーブル(ゼロベースの頂点インデックスを含む)があり、igraphで整数を頂点IDとして使用する場合はgraph、行列を行ごとにベクトルにフラット化した後、コンストラクターを使用できます。を使用するgraph.data.frameと、データフレームの最初の2列にシンボリック頂点が含まれていると見なされます(つまり、整数である必要はありません)。これらはname頂点属性に割り当てられ、igraphは0からN-1までのIDを単純に構成します。

したがって、各エッジに1行ずつNx2の行列があると仮定します。

> edges <- matrix(c(103, 86, 24, 103, 103, 2, 92, 103, 87, 103, 103, 101, 103, 44), ncol=2, byrow=T)

まず、行列を行で平坦化した後、グラフを作成します。

> g <- graph(as.vector(t(edges)))

これにより、7つのエッジを持つ有向グラフが得られ、頂点103のアウト/インディグリーは期待どおりになります。

> ecount(g)
7
> degree(g, 103, mode="out")
4
> degree(g, 103, mode="in")
3
> degree(g, 103, mode="all")
7

上記の行列で使用graph.data.frameする場合、igraphは、行列内の数値がname頂点属性に格納されているグラフを作成します。

> g <- graph.data.frame(as.data.frame(edges))
> V(g)$name
[1] "103" "24"  "92"  "87"  "86"  "2"   "101" "44"

これは、名前の付いた頂点が103実際にグラフの頂点ゼロになったことを示しています。

> degree(g, 0, mode="out")
4
> degree(g, 0, mode="in")
3
> degree(g, 0, mode="all")
7

私の知る限り、グラフにdegree頂点属性が呼び出されている場合は、頂点名を直接操作するnameこともできるので、次のこともできます。

> degree(g, "103", mode="in")
3

お役に立てれば。

于 2012-03-10T19:06:29.987 に答える
1

無向グラフを作成しました。このようなグラフには、出入りの程度はありません。igraphのドキュメント リンクから、一般的なアイデアを得ることができます。deg.netは、次のように、グラフ上のすべての度(ノードごと)を含むベクトルを返します。

[1] 2 1 1 1 1 1 1

特定のノード(この例では103)の次数を取得する場合は、ノード(appearence_order-1)を指定する必要があります。あなたの例では、(1st_node-1)を探しています。これはノード0です。したがって、次のように入力する必要があります。

度(net、0、mode ='total'、loops = FALSE)

これは、ノード0の次数「7」を返します。

于 2012-03-10T17:07:28.113 に答える