R igraph 手册页

如果您从 R 中使用 igraph,请使用此选项

igraph-attribute-combination {igraph}R 文档

当图发生变化时,igraph 函数如何处理属性

描述

很多时候,当图的结构被修改时,原始图的顶点/边的映射会映射到新创建(修改)的图中的顶点/边。例如,simplify 将多条边映射到单条边。 igraph 提供了一种灵活的机制来指定在这种情况下如何处理顶点/边属性。

详细信息

支持属性组合的函数有一个或两个额外的参数,称为 vertex.attr.comb 和/或 edge.attr.comb,它们指定如何执行属性的映射。例如,contract 将多个顶点收缩为一个顶点,顶点的属性可以组合并存储为新图的顶点属性。

(顶点或边)属性组合的规范可以给出为

  1. 一个字符标量,

  2. 一个函数对象,或

  3. 字符标量和/或函数对象的列表。

如果它是一个字符标量,那么它指的是预定义的组合之一,请参阅下面的列表。

如果它是一个函数,那么期望给定的函数执行组合。它将为图中的每个新顶点/边调用一次,带有一个参数:映射到该单个顶点的顶点的属性值。

第三个选项,一个列表,可用于为不同的属性指定不同的组合方法。列表的命名条目对应于具有相同名称的属性。列表的未命名条目(即如果名称是空字符串)指定默认的组合方法。即

list(weight="sum", "ignore")

指定新边的权重应该是旧图中相应边的权重之和;并且其余属性应被忽略(=删除)。

预定义的组合函数

以下组合行为是预定义的

"ignore"

该属性被忽略并删除。

"sum"

计算属性的总和。这不适用于字符属性,并且仅当它们具有定义的 sum 泛型时才适用于复杂属性。(例如,它适用于 Matrix 包中的稀疏矩阵,因为它们具有 sum 方法。)

"prod"

计算属性的乘积。这不适用于字符属性,并且仅当它们具有定义的 prod 函数时才适用于复杂属性。

"min"

计算并返回属性的最小值。对于字符和复杂属性,使用标准的 R min 函数。

"max"

计算并返回属性的最大值。对于字符和复杂属性,使用标准的 R max 函数。

"random"

统一随机地选择一个提供的属性值。对于字符和复杂属性,这是通过调用 sample 实现的。

"first"

始终选择第一个属性值。它通过调用 head 函数来实现。

"last"

始终选择最后一个属性值。它通过调用 tail 函数来实现。

"mean"

计算并返回属性的平均值。对于字符和复杂属性,这只是调用 mean 函数。

"median"

选择属性的中位数。为所有属性类型调用 R median 函数。

"concat"

使用 c 函数连接属性。这几乎总是导致一个复杂的属性。

作者

Gabor Csardi csardi.gabor@gmail.com

参见

graph_attrvertex_attredge_attr 有关如何在一般情况下使用图/顶点/边属性的信息。 igraph_options 关于 igraph 参数。

示例


g <- graph( c(1,2, 1,2, 1,2, 2,3, 3,4) )
E(g)$weight <- 1:5

## print attribute values with the graph
igraph_options(print.graph.attributes=TRUE)
igraph_options(print.vertex.attributes=TRUE)
igraph_options(print.edge.attributes=TRUE)

## new attribute is the sum of the old ones
simplify(g, edge.attr.comb="sum")

## collect attributes into a string
simplify(g, edge.attr.comb=toString)

## concatenate them into a vector, this creates a complex
## attribute
simplify(g, edge.attr.comb="concat")

E(g)$name <- letters[seq_len(ecount(g))]

## both attributes are collected into strings
simplify(g, edge.attr.comb=toString)

## harmonic average of weights, names are dropped
simplify(g, edge.attr.comb=list(weight=function(x) length(x)/sum(1/x),
                                name="ignore"))

[包 igraph 版本 1.3.5 索引]