【问题标题】:How to list all graph vertex attributes in R?如何列出R中的所有图形顶点属性?
【发布时间】:2013-11-28 09:33:01
【问题描述】:

我在 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

谢谢!

【问题讨论】:

  • 有同样的经历。感谢发帖。

标签: r igraph


【解决方案1】:

看起来您必须将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  

【讨论】:

  • 一定是新特性,但是下面的命令很方便提取所有顶点属性数据:get.data.frame()
【解决方案2】:

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

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

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

> V(g)$id <- c("aa", "bb", "cc")

【讨论】:

  • 这很好用,但你能帮我解决这个问题吗?:我只有一个变量中的属性名称,例如idName = "id"。尽管V(g)$id 运行良好,但V(g)[[idName]] 给了我错误Error in V(g)[[idName]] : subscript out of bounds。我应该如何使用 idName 引用它?谢谢!
  • 我不是 R 方面的专家,所以我不知道是否有更简单的方法,但经过一些实验后,我发现它可以工作:eval(parse(text=paste("V(g)$", varname, sep="")))。这基本上创建了一个包含要评估的表达式的字符串,对其进行解析,然后调用eval 来评估表达式。
  • 不,您不能使用 V(g)$ 执行此操作。它实际上与普通列表相同,如果element 是变量名,您也不​​能使用list$element。在这种情况下,您需要使用get.vertex.attributeset.vertex.attribute
猜你喜欢
  • 1970-01-01
  • 2016-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
相关资源
最近更新 更多