新闻

关于 igraph 发布和其他事项

R/igraph 1.3.0

我们致力于使 igraph 的 R 接口更接近 C 核心的最新开发成果:我们发布了 R-igraph 1.3.0,它将 R 接口内的 igraph C 核心更新到 0.9.7 版本,现在仅比主线 C 核心落后一个补丁版本。与之前的版本相比,此次更新修复了许多错误,并添加了许多新功能。

由于 igraph C 核心在 0.8 系列和 0.9.7 之间存在底层更改,在某些情况下,我们需要在 R 接口中付出额外的努力来保持与以前版本的兼容性。例如,igraph 0.9.7 现在从字面上解释紧密度、介数和边介数中心性函数中的零截止值,而 igraph 0.8 将零解释为“无截止值”。R 接口在这些情况下保持旧的行为,但会打印弃用警告;旧的行为将在 igraph 1.4.0 或 2.0.0 中消失,以先到者为准。

R/igraph 的补丁版本将在未来几天内发布,希望(最终)赶上 C 核心的 0.9 分支。我们的目标是让 R/igraph 稳定几周,同时我们致力于进一步改进 C 核心。

即使我们尽了最大努力不给 igraph 的 R 用户带来重大更改,我们也可能犯了无意的错误,因此请继续在 Github issue tracker 中报告问题。

发行说明

C 核心已更新到 0.9.7,修复了一系列错误并引入了许多新功能。

已添加

  • has_eulerian_path()has_eulerian_cycle() 决定图中是否存在欧拉路径或循环。
  • eulerian_path()eulerian_cycle() 返回图中欧拉路径或循环中的边和顶点。
  • any_loop() 检查图是否包含至少一个环边。
  • is_tree() 检查图是否为树,并找到可能的根
  • to_prufer() 将树图转换为其 Prufer 序列
  • make_from_prufer() 从其 Prufer 序列创建树图
  • sample_tree() 以均匀随机的方式对标记树进行采样
  • sample_spanning_tree() 以均匀随机的方式对无向图的生成树进行采样
  • automorphisms()canonical_permutation() 现在支持顶点颜色
  • random_edge_walk() 记录随机游走期间遍历的边
  • harmonic_centrality() 计算顶点的调和中心性,可以选择对路径长度进行截止
  • mean_distance() 现在支持边权重,并且当传递 details=TRUE 作为参数时,它还可以返回未连接的顶点对的数量
  • greedy_vertex_coloring() 根据简单的贪婪算法找到顶点着色。
  • bridges() 查找图的桥(割边)
  • 现在可以在带有 frame.width 顶点属性或 vertex.frame.width 关键字参数的绘图上调整圆形、矩形和正方形顶点形状的边框宽度,感谢 @simoncarrignon。有关更多详细信息,请参见 PR #500
  • automorphism_group() 返回图的自同构群的可能(不一定是最小的)生成集。
  • global_efficiency() 计算图的全局效率。
  • local_efficiency() 计算图中每个顶点的局部效率。
  • average_local_efficiency() 计算图中顶点集的平均局部效率。
  • rewire(each_edge(...)) 现在支持仅重新连接每个边的端点。
  • realize_degseq() 以确定性的方式从度序列生成图。它也可以作为 make_(degseq(..., deterministic=TRUE)) 使用。
  • clique_size_counts() 计算不同大小的团,而不存储所有团。
  • feedback_arc_set() 在图中找到最小权重的反馈弧集,可以使用精确的整数规划算法或线性时间逼近。
  • make_bipartite_graph() 现在处理带有名称的顶点。
  • shortest_paths() 现在支持具有负边权重的图。
  • min_cut() 现在支持 s-t 最小割,即使 value.only=FALSE
  • as.matrix() 现在支持将 igraph 图转换为邻接矩阵或边列表矩阵表示形式。有关更多详细信息,请参见 as.matrix.igraph()。此功能已从 intergraph 迁移;感谢 Michał Bojanowski

已修复

  • is_connected() 现在对于空图返回 FALSE
  • 在图上调用 length() 现在返回顶点的数量,使其与使用 [[ 索引图一致。
  • diameter() 现在在 unconnected=FALSE 时正确地为断开连接的图返回无穷大。以前的版本返回顶点的数量加一,这对于加权图显然无效。
  • mean_distance() 现在在 unconnected=FALSE 时正确地将断开连接的顶点之间的路径长度视为无穷大。以前的版本使用顶点的数量加一,增加了对此数字的偏差,即使该图是加权的,并且顶点的数量加一也不是可以安全地被视为长于任何“有效”路径的路径长度。
  • layout_with_sugiyama() 现在正确处理只有一个额外虚拟节点的情况;修复了 #85
  • bfs()dfs() 回调函数现在正确接收基于 1 的顶点索引和等级;在早期版本中它是基于零的
  • 意外地从 bfs()dfs() 回调返回非逻辑值不再导致 R 崩溃
  • 在具有小 max.lines 值(小于打印属性列表和标题所需的行数)的图上调用 print() 不再引发错误;修复了 #179
  • as_adjacency_matrix(edges=TRUE, sparse=TRUE) 现在一致地为矩阵中的每个单元格返回最后一个边 ID,而不是对它们求和。
  • +- 运算符与由两个顶点组成的 path() 对象一起使用现在可以正确处理;修复了 #355
  • topo_sort() 现在,如果输入图不是非循环的,则会引发错误,而不是返回不正确的部分排序。
  • 加权传递性计算(即 transitivity(mode="barrat") 现在为多重图引发错误;该实现对于多重图无法正常工作,并且早期版本没有对此发出警告。

已更改

  • bfs()dfs()neimode 参数已重命名为 mode,以便与其他函数保持一致。旧的参数名称已被弃用,将在 1.4.0 中删除。
  • bfs()dfs() 回调函数现在正确接收基于 1 的顶点索引和等级;在早期版本中它是基于零的。(这实际上是一个错误修复,因此也在“已修复”部分中提到)。
  • closeness()betweenness()edge_betweenness() 现在都在它们自身上采用 cutoff 参数。estimate_closeness()estimate_betweenness()estimate_edge_betweenness() 变成了别名,具有相同的签名。它们没有被弃用,但它们的实现可能会在未来的版本中发生变化,以提供适当的估计方案,而不是简单的基于截止的近似。如果您明确需要截止值,并且希望您的结果在未来的版本中具有可重现性,请在您的代码中使用带有 cutoff 参数的 closeness()betweenness()edge_betweenness()
  • closeness() 现在在计算期间仅考虑可到达的顶点;换句话说,紧密度中心性现在是为断开连接的图按每个组件计算的。早期版本考虑了所有顶点。

已弃用

  • closeness()betweenness()edge_betweenness() 使用 cutoff=0 已被弃用;如果您需要精确的分数,请使用负截止值。 从 igraph 1.4.0 开始,cutoff=0 将从字面上解释。
  • 当在没有明确的 loops 参数的情况下调用 centr_degree_tmax() 时,它现在会打印警告。 从 igraph 1.4.0 开始,loops 将是强制性的。
  • nexus_list()nexus_info()nexus_get()nexus_search() 函数现在返回一个错误,通知用户 Nexus 图存储库已离线(实际上,是几年前)。 这些函数将在 1.4.0 中删除。
  • as_adjacency_matrix()edges 参数已被弃用;它将在 igraph 1.4.0 中删除。

已删除

  • 已删除已弃用的 page_rank_old() 函数和已弃用的 page_rank()power 方法。