読者です 読者をやめる 読者になる 読者になる

tak0kadaの何でもノート

発声練習、生存確認用。

医学関連は 医学ノート

igaph、kinship2を使ってみる

R グラフ理論

遺伝子の変異とかを扱うときに便利かもしれないし気になるので使ってみた。

igraph

何の変哲もないランダムなグラフ

install.packages("igaph")
library("igraph")

mat <- matrix(nc=10, nr=10)
for (i in 1:10) {
  mat[i,] <- rbinom(n=10, size=1, prob=c(0.5, 0.5))
  mat[i, i] <- 0
}

g <- graph.adjacency(mat)
g <- as.undirected(g)

plot(g)
plot(g, layout=layout.circle)

f:id:kuyata:20140801154649p:plain

f:id:kuyata:20140801155237p:plain

山田先生のブログ記事のもやってみる。

# igraphはエッジの名前が1始まりに変わったらしい
edge.list <- matrix(c(0,1, 0,2, 0,3, 2,3, 3,4), byrow=T) + 1
edge.list

g <- graph.edgelist(el=edge.list, directed=F)

# 隣接行列
get.adjacency(g)
# エッジリスト
get.edgelist(g)

# 隣接した頂点
get.adjlist(g)
g <- graph.adjlist(get.adjlist(g)) # これからグラフを作ってみる
g <- as.undirected(g) # 元通り!

# 辺同士の関係
get.adjedgelsit(g)

shortest.paths(g)
vcount(g) # 辺の数
ecount(g) # 頂点数

kinship2

install.packages("kinship2")
library("kinship2")

# 最近流行りの家系図
fam <- data.frame(id=seq(1, 4), dad=c(0, 0, 0, 3), mom=c(0, 0, 0, 2), sex=c(0, 1, 0, 0), affected=c(0, 0, 0, 1))
plot(pedigree(id=fam$id, dad=fam$dad, mom=fam$mom, sex=fam$sex, affected=fam$affected))
# ぐぬぬ...Did not plot the following people: 1 

どうやら親子関係のない人はプロットされないらしい(仕様)。

f:id:kuyata:20140801162817p:plain