从使用igraph构建的图中,我try 使用igraph::E()[]和igraph::edge\u attr()按边属性 Select 边.在 Select 条件中稍微更改代码,应用 Select 会得到不同的结果.我觉得这出乎意料.我无法解释.请告诉我原因.

library("igraph")

# create dummy graph and selection attribute
set.seed(42)
g <- make_ring(10)
g <- set_edge_attr(g, "group", value = sample(c("A", "B"), 10, replace = TRUE))
edge_attr(g)

# select by
edge_attr_group <- "group"
random_name_of_variable <- "A"
group <- "A"

首先,认识到

# indices to select
which(edge_attr(g, edge_attr_group) == "A")
which(edge_attr(g, edge_attr_group) == random_name_of_variable)
which(edge_attr(g, edge_attr_group) == group)
# all equal and expected

我想目前为止还不错.然后应用 Select 条件

# apply selection
E(g)[which(edge_attr(g, edge_attr_group) == "A")]
E(g)[which(edge_attr(g, edge_attr_group) == random_name_of_variable)]
# both equal and expected, but
E(g)[which(edge_attr(g, edge_attr_group) == group)]
# is not equal and thus unexpected

因此,使用静态值("A")或条件变量的随机名称(random_name_of_variable)进行 Select ,我们可以得到预期的结果.但当使用group变量进行 Select 时,我们不会得到相同的结果.这是什么原因?我知道变量名与属性名相同,但这又有什么关系呢?

作为参考,会话信息和我的输出:

> sessionInfo()
R version 4.1.2 (2021-11-01)
Platform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 10 x64 (build 19044)

Matrix products: default

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] igraph_1.3.2

loaded via a namespace (and not attached):
[1] compiler_4.1.2  magrittr_2.0.3  tools_4.1.2     pkgconfig_2.0.3

> which(edge_attr(g, edge_attr_group) == "A")
[1] 1 2 3 4 9
> which(edge_attr(g, edge_attr_group) == random_name_of_variable)
[1] 1 2 3 4 9
> which(edge_attr(g, edge_attr_group) == group)
[1] 1 2 3 4 9
> E(g)[which(edge_attr(g, edge_attr_group) == "A")]
+ 5/10 edges from 0e5f311:
[1] 1-- 2 2-- 3 3-- 4 4-- 5 9--10
> E(g)[which(edge_attr(g, edge_attr_group) == random_name_of_variable)]
+ 5/10 edges from 0e5f311:
[1] 1-- 2 2-- 3 3-- 4 4-- 5 9--10
> E(g)[which(edge_attr(g, edge_attr_group) == group)]
+ 10/10 edges from 0e5f311:
 [1] 1-- 2 2-- 3 3-- 4 4-- 5 5-- 6 6-- 7 7-- 8 8-- 9 9--10 1--10

推荐答案

这是因为在索引到边或顶点序列时,属性名称是专门解释的.文件herehere对此进行了描述:

为边序列编制索引时,只需使用其名称即可引用边属性.E、 g.如果图具有权重边属性,则E(G)[weight > 1] Select 权重大于一个的所有边.请参见下面的更多示例.

因此,从组"A"中 Select 边的更简单方法是E(g)[group == "A"].

R相关问答推荐

在R中,如何创建时间间隔的图表?

手工PCA上的载体与输出双图不匹配

如何删除R中除某些特定名称外的所有字符串?

pickerInput用于显示一条或多条geom_hline,这些线在图中具有不同 colored颜色

未识别时区

如何使用ggplot对堆叠条形图进行嵌套排序?

plotly hover文本/工具提示在shiny 中不起作用

哪一行和行和 Select 特定行,但是考虑到Nas

用R ggplot2求上、下三角形中两个变量的矩阵热图

将项粘贴到向量中,并将它们分组为x的倍数,用空格分隔

警告消息";没有非缺失的参数到min;,正在返回数据中的inf";.表分组集

将摘要图添加到facet_WRAP gglot的末尾

防止在更新SHINY中的Reactive Value的部分内容时触发依赖事件

数值型数据与字符混合时如何进行绑定

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

如何合并不同列表中的数据文件,包括基于名称的部分匹配,而不是一对一等价

使用LAG和dplyr执行计算,以便按行和按组迭代

附加中缀操作符

如何修改GT表中组名行的 colored颜色 ?

R,将组ID分配给另一个观测ID变量中的值的组合