我有一个包含4列的邻接矩阵。前两列是我想在igraph对象中成为顶点的源节点和目标节点。我可以使用下面的代码实现这一点。
al <- data.frame(sourceNode=c('a', 'a', 'b', 'c'),
consumerNode=c('b', 'c', 'c', 'a'),
edgeAtt1=c('highway', 'road', 'road', 'path'),
edgeAtt2=c('1999', '2010', '2014', '1999'))
require('igraph')
g <- graph.edgelist(as.matrix(al[,c('sourceNode', 'consumerNode')]))
但是,我想要做的是在创建此igraph对象时将al
中的第3列和第4列作为边缘属性。
一些函数functionThatINeed
让我可以这样做:
g <- functionThatINeed(al[,c('sourceNode', 'consumerNode')]), edgeAttributes=al[,c('edgeAtt1', 'edgeAtt2')])
答案 0 :(得分:3)
创建图表时无法执行此操作,但您可以在edge.attributes()
require('igraph')
g <- graph.edgelist(as.matrix(al[,c('sourceNode', 'consumerNode')]))
edge.attributes(g) <- al[,c('edgeAtt1', 'edgeAtt2')]
如果你真的想,你可以创建自己的功能
graph.edgelist.attributes <- function(et, at=NULL, directed=F) {
g <- graph.edgelist(el, directed)
edge.attributes(g) <- at
g
}
答案 1 :(得分:0)
我想我确实找到了答案。来自igraph包的graph.data.frame
允许您从一个边缘列表数据框创建一个igraph对象,该数据框提供边缘属性,另一个data.frame提供节点属性。
http://www.inside-r.org/packages/cran/igraph/docs/graph.data.frame