2016-10-10 44 views
0

我有一些數據,我將在igraph中使用。每個樣本有兩個數據框:一個帶有一個鏈接列表,另一個帶有一個節點列表。 IGRAPH使用這些dataframes以產生淨如:如何在igraph中自動生成多個網絡?

net1 <- graph_from_data_frame(d=sample1links, vertices=sample1nodes) 

其中sample1linkssample1nodes不同dataframes。

我有很多不同的樣品,所以如果我可以自動化這個過程會很好。有沒有一種方法可以用來完成上述過程來生成樣本的所有網絡(即net1-netn,其中n是樣本數)?

非常感謝任何人可以幫助!

+0

你可以嘗試把所有樣品DFS在列表中,然後使用'sapply()'或'地圖()'。 – Jimbou

+0

感謝您的回覆。你知道我如何告訴R在sapply或Map中將sample1鏈接鏈接到sample1nodes,sample2links鏈接到sample2nodes等等嗎? –

回答

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

太棒了!感謝那。我只有一個問題,所以目前這個問題確實很好,但只能到樣本9。一旦樣本數量達到兩位數,它就不再起作用了。你知道這可能是爲什麼嗎? –

+0

哎呀,你是對的 - 正則表達式必須是'pattern =「sample \\ d + links」',而不是'pattern =「sample \\ dlinks」' – lukeA

+0

令人驚歎!非常感謝! –

相關問題