这是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
Run Code Online (Sandbox Code Playgroud)
尝试下面,没有工作,也尝试了一些igraph::get*功能:
net$names
E(net)$vnames
E(net)$names
Run Code Online (Sandbox Code Playgroud)
最接近我需要的是下面(我可以粘贴它们,但想知道我是否可以从对象中获取它):
get.edgelist(net)
# [,1] [,2]
# [1,] "A" "E"
# [2,] "B" "D"
# [3,] "C" "C"
# [4,] "B" "D"
# [5,] "A" "E"
Run Code Online (Sandbox Code Playgroud)
我需要一个字符向量如下:
"A|E" "B|D" "C|C" "B|D" "A|E"
Run Code Online (Sandbox Code Playgroud)
看起来它已经在对象中,我似乎找不到合适的功能.
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"
Run Code Online (Sandbox Code Playgroud)
您可以使用attr函数来检索所需的属性:
attr(E(net), "vnames")
#[1] "A|E" "B|D" "C|C" "B|D" "A|E"
Run Code Online (Sandbox Code Playgroud)
注意:正如@Frank所提到的"其他地方",如果你看一下E代码,你会看到该vnames属性是用paste构建的:( attr(res, "vnames") <- paste(el[, 1], el[, 2], sep = "|")所以你真的可以粘贴get.edgelist(net)结果......
另一种选择是使用as_ids将边序列转换为向量:
as_ids(E(net))
#[1] "A|E" "B|D" "C|C" "B|D" "A|E"
Run Code Online (Sandbox Code Playgroud)
NB:as_ids打电话attr(., "vnames")所以这不是一个不同的选择......