我正在分析R中的无向图。我试图(最终)编写一个函数来获得最大连通分量的大小(顶点数)与最大双连通分量的大小之比 - 任何随机图。我能够提取最大连通组件的大小,但是最大的双连通组件的大小有问题。我开始在图g:
上使用igraph函数biconnected_componentsbicomponent_list <- biconnected_components(g)
bicomponent_list$components # lists all of the components, including size and vertex names
length(bicomponent_list$components[[1]]) # returns number of vertices of first bicomponent
然后我的半生不熟的想法是以某种方式以减少的顶点数量排序这个列表,这样我总是可以调用length(bicomponent_list $ components [[1]]),它将是最大的双连通组件。但我不知道如何正确排序。也许我必须将它转换为矢量?但我也不知道如何指定我想要向量中的顶点数。有谁知道,或有更好的方法来做到这一点?非常感谢!
library(igraph)
# generating sample graph
g1 <- barabasi.game(100, 1, 5)
V(g1)$name <- as.character(1:100)
g2 <- erdos.renyi.game(50, graph.density(g1), directed = TRUE)
V(g2)$name <- as.character(101:200)
g3 <- graph.union(g1, g2, byname = TRUE)
# analyzing the bicomponents
bicomponent_list <- biconnected_components(g3)
bi_list <- as.list(bicomponent_list$components)
bi_list <- lapply(bi_list, length) # lists the sizes of all of the components that I want to reorder
我希望的结果是排序
bi_list
,以便length(bicomponent_list$components[[1]])
返回具有最多顶点的双组件。
答案 0 :(得分:1)
components
属性是包含顶点列表的列表。您可以迭代它们并找到它们的长度,如此
sapply(bicomponent_list$components, length)
如果您只想要最大的,请将其包裹在max()
max(sapply(bicomponent_list$components, length))