13

我在 R 中使用igraph包。

我想将一些数据与每个顶点相关联,例如通过向每个顶点添加 id 和 description 属性。属性是在运行时确定的。我有几个关于如何设置和获取这些数据的相关问题。

要设置我使用的顶点 id(图在哪里g):

> set.vertex.attribute(g,'id',1,'first_id') # etc

我希望能够通过以下方式读取属性:

> get.vertex.attribute(g,'id',1)

但这会返回 NULL。难道我做错了什么?

此外,get.vertex.attribute调用的函数无权访问属性名称列表。如何从图中提取属性名称g

最后,我想从/到命名列表中设置/获取属性的值。有没有一种简单的方法可以做到这一点,而无需遍历每个顶点和属性并应用set.- 或get.vertex.attribute

谢谢!

4

2 回答 2

13

看起来你必须将set.vertex.attribute返回的结果分配给g这样的:

g <- graph.data.frame(data.frame(one=1:2,two=2:3))
g <- set.vertex.attribute(g,'id',1,'first_id')
get.vertex.attribute(g,'id',1)
#[1] "first_id"

正如帮助处?get.vertex.attribute所说:

graph:要处理的图形对象。请注意,原始图形永远不会被修改,而是返回一个新的图形对象;如果您不将其分配给变量,您的修改将丢失!请参阅下面的示例。

此外,从同一个帮助文件中...

list.graph.attributes、list.vertex.attributes 和 list.edge.attributes 返回一个字符向量,即存在的属性名称。

list.vertex.attributes(g)
#[1] "name" "id"  

快速浏览一下,似乎没有一个简单的函数可以整体写入/输出顶点属性。你可以编造这样的东西:

lapply(list.vertex.attributes(g),function(x) get.vertex.attribute(g,x))
#[[1]]
#[1] "1" "2" "3"
# 
#[[2]]
#[1] "first_id" NA         NA  
于 2013-11-15T04:52:48.260 回答
7

使用以下语法就​​地分配顶点属性:

> V(g)[1]$id <- "first_id"
> V(g)[1]$id
[1] "aaa"

此语法还允许您检索或设置所有顶点的顶点属性;只需省略索引:

> V(g)$id <- c("aa", "bb", "cc")
于 2013-11-15T16:52:34.550 回答