グラフ オブジェクト igraph_obj (計算後に重みが格納される場所) が与えられたグラフ上のリンクのエッジの重み (この場合の適用関数の使用方法は、igraph ライブラリの知識は必要ありません) を返すこの関数があります。 node1 と node2 (データフレーム df に格納されます):
dweight <- function(igraph_obj, node1, node2){
return(E(igraph_obj)[node1 %->% node2]$weight)
}
この構造を持つデータフレームにこの関数を適用したいと思います:
Node1 Node2 other_column1 other_column2 ...
a b 1 2 ...
c d 3 7 ...
...
apply 関数に関するドキュメントとチュートリアルを読んだことがありますが、これまで試したことは、関数 dweight を各 node1、node2 などに適用するのにうまくいきませんでした。それを行うためにループを作成する必要がある場合は、次のようになります。 : df の各行 i に対する dweight(igraph_obj = g, df$Node1[i], df$Node2[i])。
したがって、適用関数は次のようになります。
apply(df, 1, dweight, igraph_obj=g)
しかし、dweight は、ノード 1、ノード 2 として使用する df の列を知りません。これも機能しません:
apply(df, 1, dweight, igraph_obj=g, node1 = df$Node1, node2 = df$Node1)