如何将值向量分配给R中igraph中的顶点标签?

Posted

技术标签:

【中文标题】如何将值向量分配给R中igraph中的顶点标签?【英文标题】:How to assign a vector of values to a vertex label in igraph in R? 【发布时间】:2022-01-16 22:05:30 【问题描述】:

假设,我在igraph 中有一个包含 3 个节点和 3 条边的图,如下所示:

library(igraph)
G <- graph(c(1,2,1,3,2,3),directed = FALSE)
V(G)$myLabel <- 1:3

它工作得很好。但我想为每个节点分配一个不同长度的标签。例如:

G <- graph(c(1,2,1,3,2,3),directed = FALSE)
V(G)[1]$myLabel <- c(10,20)
V(G)[2]$myLabel <- c(-1,-2,-3)
V(G)[3]$myLabel <- c(100,200,300,400)

在我对图表的分析过程中,每个节点的标签长度​​可能会发生变化。我该怎么做?

【问题讨论】:

【参考方案1】:

您必须将长度为 1 的对象分配给节点。 否则,只会采用第一个元素。 但是,您可以使用list 封装向量以满足该要求:

library(igraph)
#> 
#> Attaching package: 'igraph'
#> The following objects are masked from 'package:stats':
#> 
#>     decompose, spectrum
#> The following object is masked from 'package:base':
#> 
#>     union

G <- graph(c(1,2,1,3,2,3),directed = FALSE)

V(G)[1]$myLabel <- list(c(10,20))
V(G)[2]$myLabel <- list(c(-1,-2,-3))
V(G)[3]$myLabel <- list(c(100,200,300,400))

V(G)[1]$myLabel
#> [[1]]
#> [1] 10 20
V(G)[2]$myLabel
#> [[1]]
#> [1] -1 -2 -3
V(G)[3]$myLabel
#> [[1]]
#> [1] 100 200 300 400

# adding a new label to one node
V(G)[3]$myLabel <- list(c(V(G)[3]$myLabel[[1]], 500))
V(G)[3]$myLabel
#> [[1]]
#> [1] 100 200 300 400 500

由reprex package (v2.0.1) 于 2021 年 12 月 13 日创建

【讨论】:

谢谢!这可行,但是在像上面这样初始化之后,如果我现在更改 V(G)[3]$myLabel 你需要的列表:V(G)[3]$myLabel &lt;- list(1:10)

以上是关于如何将值向量分配给R中igraph中的顶点标签?的主要内容,如果未能解决你的问题,请参考以下文章

使用Igraph中的顶点标签删除边

将值从向量分配给动态数组(C++)

R igraph:按条件标注顶点

如何将值分配给 is.na() 的输出?

在igraph中构造完整的子图

在 R 中矩阵的 x、y 坐标处分配向量