使用 igraph 将大型网络拆分为多个子图

Splitting a large network into many subgraphs using igraph

我有一个大型数据集,其中包含来自不同学校的多个不同教室的社交网络数据。我想根据变量 "class_id""school_id" 将这个大网络拆分成许多较小的教室网络。我正在为标准数据帧寻找类似于 split 的函数,它允许您指定一个因子 f 来定义组数。我考虑过使用 igraph 包中的函数 induced_subgraph 。但是,查看包文档,该函数仅包含选项 vids ,其中应列出将构成子图的顶点。有没有办法使这个过程自动化(可能使用 lapply)并指定引发分组的变量?或者,还有其他功能可以做到这一点吗?

是这样的吗?

library(igraph)

net <- erdos.renyi.game(n= 100, p = .05) # generate random graph
class_id <- sample(1:5, 100, replace = T) # generate random groups

# create list of group memberships
class_id_list <- lapply(unique(class_id), function(i,j){
                        which(j %in% i)},
                        j = class_id)

# extract subnets based on group memberships
split.net <- lapply(class_id_list, function(net, v){
  induced_subgraph(net, vids = v)
  },
  net = net)