跳到内容

如果你想快速创建一个小的(命名的)图,这个函数很有用,它适用于有向图和无向图。

用法

graph_from_literal(..., simplify = TRUE)

from_literal(...)

参数

...

对于 graph_from_literal(),用于给出图结构的公式,请参阅下面的详细信息。对于 from_literal(),所有参数都将传递给 graph_from_literal()

simplify

逻辑标量,是否对创建的图调用 simplify()。 默认情况下,图会被简化,循环和多重边会被移除。

一个 igraph 图

详细信息

graph_from_literal() 非常方便用于快速创建小型图。 你需要提供一个或多个 R 表达式,用于给出图的结构。 这些表达式由顶点名称和边运算符组成。 边运算符是由 ‘-’ 和 ‘+’ 字符组成的序列,前者用于边,后者用于箭头。 边可以任意长,即你可以使用任意数量的 ‘-’ 字符来“绘制”它们。

如果所有边运算符仅由 ‘-’ 字符组成,则该图将是无向图,而单个 ‘+’ 字符表示有向图。

让我们看一些简单的例子。 没有参数,该函数会创建一个空图

一个简单的无向图,具有两个名为 ‘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 )

因此,在第三个示例中,顶点 BC 之间没有创建边。

也可以使用简单的边运算符创建互连边

  graph_from_literal( A +-+ B +---+ C ++ D + E)

再次注意,边运算符的长度是任意的,‘+’、‘++’ 和 ‘+-----+’ 具有完全相同的含义。

如果顶点名称包含空格或其他特殊字符,则需要引用它们

  graph_from_literal( "this is" +- "a silly" -+ "graph here" )

你可以用这种方式在顶点名称中包含任何字符,甚至是 ‘+’ 和 ‘-’ 字符。

请参阅下面的更多示例。

示例

# 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] + ---   * --/   %%--%/%