如果您从 R 中使用 igraph,请使用此选项
as.directed {igraph} | R 文档 |
as.directed
将无向图转换为有向图,as.undirected
则相反,它将有向图转换为无向图。
as.directed(graph, mode = c("mutual", "arbitrary", "random", "acyclic"))
as.undirected(
graph,
mode = c("collapse", "each", "mutual"),
edge.attr.comb = igraph_opt("edge.attr.comb")
)
图 |
要转换的图。 |
模式 |
字符常量,定义转换算法。对于 |
edge.attr.comb |
指定如果 |
as.directed
的转换算法
图中的边数保持不变,为每个无向边创建一个任意有向边,但边的方向是确定性的(即,如果您多次调用该函数,它始终指向同一方向)。
为每个无向边创建两个有向边,每个方向一个。
图中的边数保持不变,并为每个无向边创建一个随机有向边。 如果您使用相同的图多次调用该函数,您将获得不同的结果。
图中的边数保持不变,并为每个无向边创建一个有向边,以确保生成的图是有向无环图。 这是通过确保边始终从较低索引顶点指向较高索引顶点来实现的。 请注意,如果原始图包含环边,则该图可能包含长度为 1 的环。
as.undirected
的转换算法
边的数量保持不变,为每个有向边创建一个无向边,此版本可能会创建具有多个边的图。
将为每对至少有一个有向边连接的顶点创建一个无向边,不会创建多个边。
将为每对互连边创建一个无向边。 非互连边将被忽略。 如果同一对顶点之间存在多个互连边对,则此模式可能会创建多个边。
一个新的图对象。
Gabor Csardi csardi.gabor@gmail.com
simplify
用于从图中删除多个和/或环边。
g <- make_ring(10)
as.directed(g, "mutual")
g2 <- make_star(10)
as.undirected(g)
# Combining edge attributes
g3 <- make_ring(10, directed=TRUE, mutual=TRUE)
E(g3)$weight <- seq_len(ecount(g3))
ug3 <- as.undirected(g3)
print(ug3, e=TRUE)
## Not run:
x11(width=10, height=5)
layout(rbind(1:2))
plot( g3, layout=layout_in_circle, edge.label=E(g3)$weight)
plot(ug3, layout=layout_in_circle, edge.label=E(ug3)$weight)
## End(Not run)
g4 <- graph(c(1,2, 3,2,3,4,3,4, 5,4,5,4,
6,7, 7,6,7,8,7,8, 8,7,8,9,8,9,
9,8,9,8,9,9, 10,10,10,10))
E(g4)$weight <- seq_len(ecount(g4))
ug4 <- as.undirected(g4, mode="mutual",
edge.attr.comb=list(weight=length))
print(ug4, e=TRUE)