2016-10-10 5 views
0

igraphで使用する予定のデータがあります。各サンプルには、リンクリストとノードリストの2つのデータフレームがあります。 IGRAPHは、ネットなどを生産するためにこれらのデータフレームを使用しています。:igraphで複数のネットの生産を自動化するにはどうしたらいいですか?

sample1linkssample1nodesが異なるデータフレームです
net1 <- graph_from_data_frame(d=sample1links, vertices=sample1nodes) 

私はさまざまなサンプルを持っていますので、このプロセスを自動化できればいいと思います。上記のプロセスを実行してサンプルのすべてのネットを生成するために使用できる方法はありますか(つまり、net1-netn、nはサンプルの数です)?

お手数をおかけしていただきありがとうございます。

+0

あなたは 'sapply()'や '地図()'を使用、その後、リスト内のすべてのサンプルのDFSを置くことを試みることができます。 – Jimbou

+0

ご返信ありがとうございます。あなたはsample1リンクをsample1ノードに、sample2リンクをsample2ノードに、そしてサプリーやMapにlinkするようにRにどのように伝えるのか知っていますか? –

答えて

2

ここでは例です:

library(igraph) 

# 2 example graphs as data frames 
sample1nodes <- read.table(text = "a\nb\n\nc\nd\ne") 
sample1links <- read.table(text = "a c\n\nb c\nc d") 
sample2nodes <- read.table(text = "A\nB\n\nc\nd\ne") 
sample2links <- read.table(text = "A c\n\nB c\nc d") 

# create igraph objects from data frames in a list 
glst <- Map(graph_from_data_frame, d=mget(ls(pattern = "sample\\d+links")), vertices=mget(ls(pattern = "sample\\d+nodes"))) 
names(glst) <- paste0("net", sub("sample(\\d+)links", "\\1", names(glst))) # rename list objects 

# Store list elements in the global environment under their names 
list2env(glst, envir = .GlobalEnv) 

# plot 
par(mfrow = c(1,2)) 
plot(net1) 
plot(net2) 
+0

それは素晴らしいです!ありがとうございました。私は1つの質問しか持っていないので、現時点では本当にうまくいくが、サンプル9までしかない。サンプルが二重の数字になったら、もう動作しません。それがなぜ起こっているのか知っていますか? –

+0

おっと、そうですね。正規表現は 'pattern =" sample \\ d + links "でなければなりません。' pattern = "sample \\ dlinks" ' – lukeA

+0

すごい!そんなにありがとう! –

関連する問題