关于 igraph 发布和其他事项
我们致力于使 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() 现在对于空图返回 FALSElength() 现在返回顶点的数量,使其与使用 [[ 索引图一致。diameter() 现在在 unconnected=FALSE 时正确地为断开连接的图返回无穷大。以前的版本返回顶点的数量加一,这对于加权图显然无效。mean_distance() 现在在 unconnected=FALSE 时正确地将断开连接的顶点之间的路径长度视为无穷大。以前的版本使用顶点的数量加一,增加了对此数字的偏差,即使该图是加权的,并且顶点的数量加一也不是可以安全地被视为长于任何“有效”路径的路径长度。layout_with_sugiyama() 现在正确处理只有一个额外虚拟节点的情况;修复了 #85bfs() 和 dfs() 回调函数现在正确接收基于 1 的顶点索引和等级;在早期版本中它是基于零的bfs() 或 dfs() 回调返回非逻辑值不再导致 R 崩溃max.lines 值(小于打印属性列表和标题所需的行数)的图上调用 print() 不再引发错误;修复了 #179as_adjacency_matrix(edges=TRUE, sparse=TRUE) 现在一致地为矩阵中的每个单元格返回最后一个边 ID,而不是对它们求和。+ 和 - 运算符与由两个顶点组成的 path() 对象一起使用现在可以正确处理;修复了 #355topo_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 方法。