・お題:エッジリストを入手したけれど、所用で隣接行列を入手したくなった。igraphを使って変換してみたい。
・公式にやり方が書いてあった。
・ライブラリを読み込む。
> library(igraph)
・データを読み込む。今回のデータは、重み付きのエッジリスト。
> d <- read.table("test1.txt", header=FALSE)
> d
・とりあえず、重みをもたない無向グラフとして読み込んでみる。
> g <- graph.data.frame(d[1:2], directed=FALSE)
> plot(g)
・隣接行列に変換してみる。
> as_adjacency_matrix(g)
・見事に対称行列になっている。ただ、ぽっちが気になるので、これをゼロにしたい。
> as_adjacency_matrix(g,
+ sparse = FALSE)
・次に、有向行列もやってみる。
> g <- graph.data.frame(d[1:2], directed=TRUE)
> plot(g)
> as_adjacency_matrix(g,
+ sparse = FALSE)
・見てみると、対称行列ではなくなっている。AからBへはエッジが伸びているが、BからAにはエッジが伸びていない。
・次に、重み付き有向グラフを考えてみる。
> g <- graph.data.frame(d[1:2], directed=TRUE)
> E(g)$weight <- d[ [3] ]
> plot(g,
+ edge.width = E(g)$weight)
> as_adjacency_matrix(g,
+ sparse = FALSE,
+ attr = "weight")
・今までは、エッジが伸びている/いないの1/0だったが、今回は重みが入っている。BからCへ、重み2のエッジが伸びていることが分かる。
・ちなみに、エッジリストはget.data.frame関数で取れそう。
> get.data.frame(g)
・as_adj_list関数だと予想と違うものが返ってきた。
おわり。