2

この質問が冗長に思われる場合は申し訳ありませんが、クラスで R とその SNA ツールをいじり始めており、慣れるためにいくつかの異なるチュートリアル/ラボを実行しています。常に推奨されるリソースは、スタンフォード大学の SNA ラボですが、入門ラボを実行するだけでも多くのエラーが返され、混乱します。注釈付きの完全な R コードは、次の場所で入手できます。

http://sna.stanford.edu/lab.php?l=1

最初の部分は非常に簡単で、何が起こっているのかほとんど理解できます。しかし、グラフに頂点属性を追加しようとすると (236 行目以降)、作成したばかりのグラフ オブジェクト "krack_full" で問題が発生します。これを実行しています...:

for (i in V(krack_full)) {
    for (j in names(attributes)) {
        krack_full <- set.vertex.attribute(krack_full, 
                                           j, 
                                           index = i, 
                                           attributes[i + 1, j])
    }
}

...これを返します:

Error in set.vertex.attribute(krack_full, j, index = i, attributes[i +  : 
  unused argument (index = i)

だから、彼らが概説した2番目の方法を使用して、それに従ってください:

attributes = cbind(1:length(attributes[,1]), attributes)
krack_full <- graph.data.frame(d = krack_full_nonzero_edges, 
+ vertices = attributes) 

これはうまくいくようです-文字通り「(1:length(attributes[, 1])」という属性を作成することを除いて...

> summary(krack_full)
IGRAPH DN-- 21 232 -- 
attr: name (v/c), 1:length(attributes[, 1]) (v/n), AGE (v/n), TENURE (v/n), LEVEL (v/n), DEPT
  (v/n), advice_tie (e/n), friendship_tie (e/n), reports_to_tie (e/n)

だから、すべてがすでに奇妙に機能しています。最後に、次のステップで頂点属性を取得しようとすると、オブジェクトのクラスに関するいくつかのエラーが発生します。

> get.vertex.attribute(krack_full, 'AGE')
Error in get.vertex.attribute(krack_full, "AGE") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'TENURE')
Error in get.vertex.attribute(krack_full, "TENURE") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'LEVEL')
Error in get.vertex.attribute(krack_full, "LEVEL") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'DEPT')
Error in get.vertex.attribute(krack_full, "DEPT") : 
  get.vertex.attribute requires an argument of class network.

... ここから先、私が期待したように機能するものはほとんどありません。それで、データがインポートされたグラフオブジェクト「krack_full」は、どういうわけか本来あるべきものではないのではないかと思います...?

繰り返しますが、これが私が犯している完全な初心者の間違いである場合は申し訳ありませんが、正しい方向に向けていただければ幸いです. ここで何が起こっているのかをよりよく理解したいと思います。

どうもありがとうございました。

4

2 に答える 2

2

あなたが従おうとしているチュートリアルは、igraph バージョン 0.5.4 以前用に開発されたものではないかと強く疑っています。当時、igraph オブジェクトの頂点とエッジは 1 ではなく 0 からインデックス付けされていました。チュートリアルの次のコメントから判断すると、チュートリアルではこれが説明されているようです。

# IMPORTANT NOTE: Unlike in most languages, R objects are numbered
# from 1 instead of 0, so if you want the first element in a
# vector, you would reference it by vector_name[1]. HOWEVER,
# igraph objects are numbered starting from 0. This can lead to 
# lots of confusion, since it's not always obvious at first which 
# objects are native to R and which belong to igraph.

igraph 0.6 以降、これは当てはまりません。igraph の R インターフェイスの頂点とエッジは、他のすべての適切に動作する R オブジェクトと同様に、1 からインデックスが付けられます。ここには 2 つのオプションがあります (チュートリアルの作成者に igraph 0.6 用に更新するよう依頼する以外に):

  1. チュートリアルのコマンドを変更して、すべての頂点とエッジ インデックスが 1 ベースになるようにすることができます。つまり、何らかの理由でどこかのインデックスから 1 を引いた場合は、単に減算を省略し、同様に、どこかのインデックスに 1 を追加した場合は、加算を省略します。これは、自分がやっていることを本当に理解しているかどうかを確認する良い方法でもあります:)

  2. igraph0の代わりにパッケージを使用してくださいigraph。このigraph0パッケージは と同じですigraphが、0 から始まるインデックスを使用して、移行期間中も古い igraph コードが引き続き機能するようにします。ただし、igraph新しい分析プロジェクトには引き続き使用する必要があります。

于 2013-07-08T16:06:11.450 に答える
1

機能について

get.vertex.attribute 

新しい機能を試す

vertex_attr 

代わりは

于 2015-12-23T16:54:48.500 に答える