r - 从 igraph 对象中提取 vnames

标签 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"

最佳答案

您可以使用 attr检索所需属性的函数:

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

注意:正如@Frank 在“其他地方”提到的那样,如果您查看 E代码,你会看到 vnames属性是用粘贴构建的:( 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"

注意:as_ids电话 attr(., "vnames")所以这并不是一个真正不同的选择...

关于r - 从 igraph 对象中提取 vnames,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37392605/

相关文章:

sql - 在 R 中调用带参数的 SQL Server 存储过程

r - 如何使 echarts4r 上的标题居中?

r - 在图论中解释社区结构

r - 使用 igraph : community membership of components built by decompose. graph()

r - 有没有办法在错误后继续 R 中的 for 循环而不使用 try() 或 tryCatch()

r - R 中数值的 double (64 位)表示(符号、指数、有效数)

r - 3 列 CSV,到邻接矩阵,到网络图,到 Arcplot

r - 给定空间(六边形)网格,我如何获得高阶邻居的样本?

r - 将边列表加权到 r 中的有向和无向图中

R igraph 重命名顶点