如何在igraph中自动生成多个网?

时间:2016-10-10 10:40:52

标签: r for-loop igraph

我有一些我将在igraph中使用的数据。每个样本有两个数据帧:一个包含链接列表,另一个包含节点列表。 Igraph使用这些数据帧来生成网络,例如:

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

其中sample1linkssample1nodes是不同的数据框。

我有很多不同的样本,所以如果我可以自动化这个过程会很好。是否有一种方法我可以使用上述过程来生成样本的所有网络(即net1-netn,其中n是样本数)?

非常感谢能帮助的人!!

1 个答案:

答案 0 :(得分: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)