跳到内容

像邻接矩阵一样查询和操作图

用法

# S3 method for class 'igraph'
`[`(
  x,
  i,
  j,
  ...,
  from,
  to,
  sparse = igraph_opt("sparsematrices"),
  edges = FALSE,
  drop = TRUE,
  attr = if (is_weighted(x)) "weight" else NULL
)

参数

x

图。

i

索引。顶点 ID 或名称或逻辑向量。详见下文。

j

索引。顶点 ID 或名称或逻辑向量。详见下文。

...

目前忽略。

from

一个数字或字符向量,给出顶点 ID 或名称。与 to 参数一起,可用于查询/设置一系列边。详见下文。此参数不能与任何 ij 参数一起出现,如果它存在,则 to 参数也必须存在。

to

一个数字或字符向量,给出顶点 ID 或名称。与 from 参数一起,可用于查询/设置一系列边。详见下文。此参数不能与任何 ij 参数一起出现,如果它存在,则 from 参数也必须存在。

sparse

逻辑标量,是否返回稀疏矩阵。

edges

逻辑标量,是否返回边 ID。

drop

忽略。

attr

如果不是 NULL,则应为边属性的名称。查询并返回此属性。

一个标量或矩阵。详见下文。

详细信息

单方括号索引图的(可能加权的)邻接矩阵。以下是您可以执行的操作

  1. 检查图中两个顶点(\(v\) 和 \(w\))之间是否存在边

      graph[v, w]

    返回一个数字标量,如果边存在则返回 1,否则返回 0。

  2. 提取图的(稀疏)邻接矩阵或其一部分

      graph[]
    graph[1:3,5:6]
    graph[c(1,3,5),]

    第一个变体返回完整的邻接矩阵,其他两个变体返回其一部分。

  3. fromto 参数可用于检查多个边的存在。在这种情况下,fromto 都必须存在,并且它们必须具有相同的长度。它们必须包含顶点 ID 或名称。返回一个数字向量,其长度与 fromto 相同,对于现有边,它包含 1,对于不存在的边,它包含 0。示例

      graph[from=1:3, to=c(2,3,5)]

    .

  4. 对于加权图,[ 运算符返回边权重。对于不存在的边,返回零权重。也可以查询其他边属性,通过给出 attr 参数。

  5. 查询边 ID,而不是边的存在或边属性。例如

      graph[1, 2, edges=TRUE]

    返回顶点 1 和 2 之间的边的 ID,如果不存在此类边,则返回零。

  6. 向图中添加一条或多条边。为此,虚构邻接矩阵的元素必须设置为非零数字值(或 TRUE

      graph[1, 2] <- 1
    graph[1:3,1] <- 1
    graph[from=1:3, to=c(2,3,5)] <- TRUE

    这不会影响图中已存在的边,即不会创建多个边。

  7. 向图中添加加权边。attr 参数包含要设置的边属性的名称,因此不必是“weight”

      graph[1, 2, attr="weight"]<- 5
    graph[from=1:3, to=c(2,3,5)] <- c(1,-1,4)

    如果网络中已存在边,则仅更新其权重或其他属性。如果图已加权,则 attr="weight" 设置是隐式的,无需明确给出。

  8. 删除边。替换语法允许通过指定 FALSENULL 作为替换值来删除边

      graph[v, w] <- FALSE

    从顶点 \(v\) 到顶点 \(w\) 删除边。因为这可用于删除两组顶点之间的边,无论是成对的

      graph[from=v, to=w] <- FALSE

    还是不成对的

      graph[v, w] <- FALSE 

    如果 \(v\) 和 \(w\) 是边 ID 或名称的向量。

[” 也允许逻辑索引和负索引,具有通常的 R 语义。例如

  graph[degree(graph)==0, 1] <- 1

将每条孤立顶点到顶点一添加一条边,并且

  G <- make_empty_graph(10)
G[-1,1] <- TRUE

创建一个星型图。

当然,索引运算符支持顶点名称,因此除了数字顶点 ID 外,也可以将顶点赋予 “[” 和 “[[”。