将二分图投影成两个单模网络
用法
bipartite_projection(
graph,
types = NULL,
multiplicity = TRUE,
probe1 = NULL,
which = c("both", "true", "false"),
remove.type = TRUE
)
bipartite_projection_size(graph, types = NULL)
参数
- graph
输入图。它可以是有向图,但在计算过程中会忽略边的方向。
- types
一个可选的顶点类型向量,用于代替 ‘
type
’ 顶点属性。如果该图没有 ‘type
’ 顶点属性,则必须提供此参数。- multiplicity
如果
TRUE
,则 igraph 将边的重数保留为名为“weight”的边属性。例如,如果二分图中存在 A-C-B 和 A-D-B 三元组(但没有更多的 X,使得 A-X-B 也在图中),则投影中 A-B 边的重数为 2。- probe1
此参数可用于指定结果列表中投影的顺序。如果给定,则将其视为顶点 ID(或符号顶点名称);包含此顶点的投影将是结果列表中的第一个。如果在参数
which
中仅请求一个投影,则忽略此参数。- which
一个字符标量,用于指定要计算的投影。默认是计算两者。
- remove.type
逻辑标量,是否从投影中删除
type
顶点属性。这是有道理的,因为这些图不再是二分图。但是,如果要将它们彼此组合(或其他二分图),则值得保留此属性。默认情况下,它将被删除。
详细信息
二分图在igraph中具有type
顶点属性,这是一个布尔值,第一类顶点为FALSE
,第二类顶点为TRUE
。
bipartite_projection_size()
计算二分图的两个投影中的顶点和边的数量,而不计算投影本身。这对于检查如果您有大型二分图,投影需要多少内存非常有用。
bipartite_projection()
计算实际的投影。您可以使用 probe1
参数来指定结果中投影的顺序。默认情况下,顶点类型 FALSE
是第一个,TRUE
是第二个。
bipartite_projection()
保留顶点属性。
参见
二分图 bipartite_mapping()
, is_bipartite()
, make_bipartite_graph()
作者
Gabor Csardi csardi.gabor@gmail.com
示例
## Projection of a full bipartite graph is a full graph
g <- make_full_bipartite_graph(10, 5)
proj <- bipartite_projection(g)
isomorphic(proj[[1]], make_full_graph(10))
#> [1] TRUE
isomorphic(proj[[2]], make_full_graph(5))
#> [1] TRUE
## The projection keeps the vertex attributes
M <- matrix(0, nrow = 5, ncol = 3)
rownames(M) <- c("Alice", "Bob", "Cecil", "Dan", "Ethel")
colnames(M) <- c("Party", "Skiing", "Badminton")
M[] <- sample(0:1, length(M), replace = TRUE)
M
#> Party Skiing Badminton
#> Alice 0 1 1
#> Bob 1 1 0
#> Cecil 0 0 0
#> Dan 1 1 0
#> Ethel 1 0 0
g2 <- graph_from_biadjacency_matrix(M)
g2$name <- "Event network"
proj2 <- bipartite_projection(g2)
print(proj2[[1]], g = TRUE, e = TRUE)
#> IGRAPH b773bd3 UNW- 5 5 -- Event network
#> + attr: name (g/c), name (v/c), weight (e/n)
#> + edges from b773bd3 (vertex names):
#> [1] Alice--Bob Alice--Dan Bob --Dan Bob --Ethel Dan --Ethel
print(proj2[[2]], g = TRUE, e = TRUE)
#> IGRAPH 0f46f0b UNW- 3 2 -- Event network
#> + attr: name (g/c), name (v/c), weight (e/n)
#> + edges from 0f46f0b (vertex names):
#> [1] Party --Skiing Skiing--Badminton