很多时候,当图形的结构被修改时,原始图形的顶点/边的映射会映射到新创建(修改)的图形中的顶点/边。例如,simplify()
将多条边映射到单条边。 igraph 提供了一种灵活的机制来指定在这些情况下如何处理顶点/边属性。
详细信息
支持属性组合的函数具有一个或两个额外的参数,称为 vertex.attr.comb
和/或 edge.attr.comb
,用于指定如何执行属性的映射。例如,contract()
将多个顶点收缩为一个顶点,顶点的属性可以组合并存储为新图形的顶点属性。
(顶点或边)属性组合的规范可以给出为
字符标量,
函数对象或
字符标量和/或函数对象的列表。
如果它是字符标量,则它指的是预定义的组合之一,请参阅下面的列表。
如果它是一个函数,则期望给定的函数执行组合。它将为图形中的每个新顶点/边调用一次,参数只有一个:映射到该单个顶点的顶点的属性值。
第三个选项,列表可用于为不同的属性指定不同的组合方法。列表的命名条目对应于具有相同名称的属性。列表的未命名条目(即如果名称为空字符串)指定默认的组合方法。即
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()
函数连接属性。这几乎总是会产生一个复杂的属性。
参见
关于如何普遍使用图形/顶点/边属性,请参阅 graph_attr()
、vertex_attr()
、edge_attr()
。关于 igraph 参数,请参阅 igraph_options()
。
顶点、边和图形属性 delete_edge_attr()
、delete_graph_attr()
、delete_vertex_attr()
、edge_attr()
、edge_attr<-()
、edge_attr_names()
、graph_attr()
、graph_attr<-()
、graph_attr_names()
、igraph-dollar
、igraph-vs-attributes
、set_edge_attr()
、set_graph_attr()
、set_vertex_attr()
、set_vertex_attrs()
、vertex_attr()
、vertex_attr<-()
、vertex_attr_names()
作者
Gabor Csardi csardi.gabor@gmail.com
示例
g <- make_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")
#> IGRAPH 24cb9bc D-W- 4 3 --
#> + attr: weight (e/n)
#> + edges from 24cb9bc:
#> [1] 1->2 2->3 3->4
## collect attributes into a string
simplify(g, edge.attr.comb = toString)
#> IGRAPH 75d7cb1 D-W- 4 3 --
#> + attr: weight (e/c)
#> + edges from 75d7cb1:
#> [1] 1->2 2->3 3->4
## concatenate them into a vector, this creates a complex
## attribute
simplify(g, edge.attr.comb = "concat")
#> IGRAPH e2a1ae7 D-W- 4 3 --
#> + attr: weight (e/x)
#> + edges from e2a1ae7:
#> [1] 1->2 2->3 3->4
E(g)$name <- letters[seq_len(ecount(g))]
## both attributes are collected into strings
simplify(g, edge.attr.comb = toString)
#> IGRAPH 2dd0af7 D-W- 4 3 --
#> + attr: weight (e/c), name (e/c)
#> + edges from 2dd0af7:
#> [1] 1->2 2->3 3->4
## harmonic average of weights, names are dropped
simplify(g, edge.attr.comb = list(
weight = function(x) length(x) / sum(1 / x),
name = "ignore"
))
#> IGRAPH faaf1ad D-W- 4 3 --
#> + attr: weight (e/n)
#> + edges from faaf1ad:
#> [1] 1->2 2->3 3->4