web-dev-qa-db-ja.com

エッジのない自己ループと頂点を削除します

私は遺伝子ネットワークを構築しています。隣接行列に変換した2列のデータフレームがあり、igraphで使用しています。問題は、自己ループを持つ遺伝子があることです。自己ループを取り除き、次にネットワークからエッジを持たない(おそらく分離された)頂点を取り除きたいのです。私はいくつかのことを試しましたが、どういうわけかそれらは機能しません。私のコードは

 InnatedGraph <- graph.data.frame(innate,directed=FALSE)
 V(InnatedGraph)$label.cex = 0.4
 plot(InnatedGraph,vertex.label=V(InnatedGraph)$symbol, vertex.size=5)

innateは私の2列のデータフレームです。次数関数を使って0次数の頂点を削除しようとしましたが、残念ながら機能しないと思います(おそらく、自己ループ遺伝子の次数が1であるためです)。

bad.vs<-V(InnatedGraph)[degree(InnatedGraph) == 0] 
clean <-delete.vertices(InnatedGraph, bad.vs)

パッケージBioNet「rmSelfLoops」の別の関数を使用してみました。この関数を使用して、セルフループのエッジを削除できましたが、エッジのない頂点を削除できませんでした。

test<-rmSelfLoops(InnatedGraph)

理解しやすくするために、ネットワークの写真も含めます。 enter image description here

8
Saad

この例のグラフとその2つのサブセット/変更について考えてみます。

library(igraph)
set.seed(1)
g <- random.graph.game(10, p.or.m = 3, "gnm") + Edge(7,7)
coords <- layout.auto(g)
par(mfrow = c(1,3))
plot(g, layout = coords)
plot(simplify(g), layout = coords) # remove loops and multiple edges
plot(delete.vertices(simplify(g), degree(g)==0)) # additionally delete isolated nodes

enter image description here


コメントからのOPのサンプルデータの使用:

df <- read.csv(header=F, row.names = 1, stringsAsFactors=F, text='"53","ENSG00000175104","ENSG00000175104"
"54","ENSG00000174775","ENSG00000175104"
"55","ENSG00000032688","ENSG00000027164"
"56","ENSG00000175104","ENSG00000140968"
"57","ENSG00000027164","ENSG00000041515"
"58","ENSG00000027164","ENSG00000025498"')
library(igraph)
( dfclean <- subset(df, V2!=V3) ) # remove rows where source==target
#                V2              V3
# 54 ENSG00000174775 ENSG00000175104
# 55 ENSG00000032688 ENSG00000027164
# 56 ENSG00000175104 ENSG00000140968
# 57 ENSG00000027164 ENSG00000041515
# 58 ENSG00000027164 ENSG00000025498
par(mfrow = c(1,3))
plot(graph_from_data_frame(df), Edge.arrow.size = .5) # orig
plot(simplify(graph_from_data_frame(df)), Edge.arrow.size = .5) # same as
plot(graph_from_data_frame(dfclean), Edge.arrow.size = .5) # this one
15
lukeA

関数graph_from_adjacency_matrixを使用して隣接行列をグラフに変換し、引数diag=Fを設定します。

それは自己ループを取り除くはずです。

0
brawni