如果你想快速创建一个小的(命名的)图,这个函数很有用,它适用于有向图和无向图。
参数
- ...
对于
graph_from_literal()
,用于给出图结构的公式,请参阅下面的详细信息。对于from_literal()
,所有参数都将传递给graph_from_literal()
。- simplify
逻辑标量,是否对创建的图调用
simplify()
。 默认情况下,图会被简化,循环和多重边会被移除。
详细信息
graph_from_literal()
非常方便用于快速创建小型图。 你需要提供一个或多个 R 表达式,用于给出图的结构。 这些表达式由顶点名称和边运算符组成。 边运算符是由 ‘-
’ 和 ‘+
’ 字符组成的序列,前者用于边,后者用于箭头。 边可以任意长,即你可以使用任意数量的 ‘-
’ 字符来“绘制”它们。
如果所有边运算符仅由 ‘-
’ 字符组成,则该图将是无向图,而单个 ‘+
’ 字符表示有向图。
让我们看一些简单的例子。 没有参数,该函数会创建一个空图
一个简单的无向图,具有两个名为 ‘A’ 和 ‘B’ 的顶点以及一条边
graph_from_literal(A-B)
请记住,边的长度无关紧要,因此我们可以编写以下内容,这会创建相同的图
graph_from_literal( A-----B )
如果图中有很多断开连接的组件,请用逗号分隔它们。 你还可以给出孤立的顶点。
graph_from_literal( A--B, C--D, E--F, G--H, I, J, K )
‘:
’ 运算符可用于定义顶点集。 如果一个边运算符连接两个顶点集,则第一个集合中的每个顶点都将连接到第二个集合中的每个顶点。 以下形式创建完整的图,包括循环边
graph_from_literal( A:B:C:D -- A:B:C:D )
在有向图中,只有当边运算符在边的末尾包含箭头(‘+’)时,才会创建边
graph_from_literal( A -+ B -+ C )
graph_from_literal( A +- B -+ C )
graph_from_literal( A +- B -- C )
因此,在第三个示例中,顶点 B
和 C
之间没有创建边。
也可以使用简单的边运算符创建互连边
graph_from_literal( A +-+ B +---+ C ++ D + E)
再次注意,边运算符的长度是任意的,‘+
’、‘++
’ 和 ‘+-----+
’ 具有完全相同的含义。
如果顶点名称包含空格或其他特殊字符,则需要引用它们
graph_from_literal( "this is" +- "a silly" -+ "graph here" )
你可以用这种方式在顶点名称中包含任何字符,甚至是 ‘+’ 和 ‘-’ 字符。
请参阅下面的更多示例。
参见
其他确定性构造函数:graph_from_atlas()
, graph_from_edgelist()
, make_()
, make_chordal_ring()
, make_empty_graph()
, make_full_citation_graph()
, make_full_graph()
, make_graph()
, make_lattice()
, make_ring()
, make_star()
, make_tree()
示例
# A simple undirected graph
g <- graph_from_literal(
Alice - Bob - Cecil - Alice,
Daniel - Cecil - Eugene,
Cecil - Gordon
)
g
#> IGRAPH 772cc8b UN-- 6 6 --
#> + attr: name (v/c)
#> + edges from 772cc8b (vertex names):
#> [1] Alice--Bob Alice--Cecil Bob --Cecil Cecil--Daniel Cecil--Eugene
#> [6] Cecil--Gordon
# Another undirected graph, ":" notation
g2 <- graph_from_literal(Alice - Bob:Cecil:Daniel, Cecil:Daniel - Eugene:Gordon)
g2
#> IGRAPH 6bc5723 UN-- 6 7 --
#> + attr: name (v/c)
#> + edges from 6bc5723 (vertex names):
#> [1] Alice --Bob Alice --Cecil Alice --Daniel Cecil --Eugene Cecil --Gordon
#> [6] Daniel--Eugene Daniel--Gordon
# A directed graph
g3 <- graph_from_literal(
Alice +-+ Bob --+ Cecil +-- Daniel,
Eugene --+ Gordon:Helen
)
g3
#> IGRAPH 1585638 DN-- 7 6 --
#> + attr: name (v/c)
#> + edges from 1585638 (vertex names):
#> [1] Alice ->Bob Bob ->Alice Bob ->Cecil Daniel->Cecil Eugene->Gordon
#> [6] Eugene->Helen
# A graph with isolate vertices
g4 <- graph_from_literal(Alice -- Bob -- Daniel, Cecil:Gordon, Helen)
g4
#> IGRAPH 994cbe2 UN-- 6 2 --
#> + attr: name (v/c)
#> + edges from 994cbe2 (vertex names):
#> [1] Alice--Bob Bob --Daniel
V(g4)$name
#> [1] "Alice" "Bob" "Daniel" "Cecil" "Gordon" "Helen"
# "Arrows" can be arbitrarily long
g5 <- graph_from_literal(Alice +---------+ Bob)
g5
#> IGRAPH 29ec3e4 DN-- 2 2 --
#> + attr: name (v/c)
#> + edges from 29ec3e4 (vertex names):
#> [1] Alice->Bob Bob ->Alice
# Special vertex names
g6 <- graph_from_literal("+" -- "-", "*" -- "/", "%%" -- "%/%")
g6
#> IGRAPH e7c0002 UN-- 6 3 --
#> + attr: name (v/c)
#> + edges from e7c0002 (vertex names):
#> [1] + --- * --/ %%--%/%