从igraph对象中提取vnames

时间:2016-05-23 13:40:07

标签: r igraph

以下是igraph对象的示例:

library(igraph)
#dummy data
d <- data.frame( x = LETTERS[1:5], y = LETTERS[5:1] )
links <- d
nodes <- as.character(d$x)

#graph object
net <- graph.data.frame(links, nodes, directed = FALSE)

str(net)
# IGRAPH UN-- 5 5 -- 
# + attr: name (v/c)
# + edges (vertex names):
#   [1] A--E B--D C--C B--D A--E

尝试下面,没有工作,也尝试了一些igraph::get*功能:

net$names
E(net)$vnames
E(net)$names

最接近我需要的是(我可以粘贴它们,但想知道我是否可以从对象中获取它):

get.edgelist(net)
#      [,1] [,2]
# [1,] "A"  "E" 
# [2,] "B"  "D" 
# [3,] "C"  "C" 
# [4,] "B"  "D" 
# [5,] "A"  "E" 

我需要一个字符向量,如下所示:

"A|E" "B|D" "C|C" "B|D" "A|E"

看起来它已经在对象中,我似乎无法找到合适的功能。

str(E(net))
# Class 'igraph.es'  atomic [1:5] 1 2 3 4 5
#   ..- attr(*, "vnames")= chr [1:5] "A|E" "B|D" "C|C" "B|D" ...
#   ..- attr(*, "env")=<weakref> 
#   ..- attr(*, "graph")= chr "8a71f114-20e8-11e6-bb83-f96f1023ec99"

1 个答案:

答案 0 :(得分:5)

您可以使用attr功能检索所需的属性:

attr(E(net), "vnames")
#[1] "A|E" "B|D" "C|C" "B|D" "A|E"

NB :正如@Frank在“其他地方”提到的那样,如果您查看E代码,您会看到{{ 1}}属性是使用粘贴:vnames构建的,因此您只需粘贴attr(res, "vnames") <- paste(el[, 1], el[, 2], sep = "|")结果...

另一种选择是使用get.edgelist(net)将边缘序列转换为向量:

as_ids

NB as_ids(E(net)) #[1] "A|E" "B|D" "C|C" "B|D" "A|E" 调用as_ids所以它实际上不是一个不同的选项......