我正在使用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
的情况下执行此操作?
谢谢!
答案 0 :(得分: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"
从快速浏览看,似乎没有一个简单的函数来写入/输出顶点属性 en masse 。你可以编造这样的东西:
lapply(list.vertex.attributes(g),function(x) get.vertex.attribute(g,x))
#[[1]]
#[1] "1" "2" "3"
#
#[[2]]
#[1] "first_id" NA NA
答案 1 :(得分:7)
使用以下语法就地分配顶点属性:
> V(g)[1]$id <- "first_id"
> V(g)[1]$id
[1] "aaa"
此语法还允许您检索或设置所有顶点的顶点属性;只是省略索引:
> V(g)$id <- c("aa", "bb", "cc")