在R中使用asIgraph()函数将网络对象转换为igraph对象时出错?

时间:2018-06-07 04:43:08

标签: r igraph

我目前正在尝试将网络对象转换为igraph对象。从各个帖子中,我了解intergraph包可以通过asIgraph()函数执行此操作。我正在尝试转换经典的Sampson数据集,该数据集位于ergm包中。当我这样做时:

> library(ergm)
> library(intergraph)
> library(igraph)
> data(sampson)
> class(samplike) # The network object
[1] "network"
> asIgraph(samplike)
Error in (function (..., row.names = NULL, check.rows = FALSE, check.names = TRUE,  : 
  arguments imply differing number of rows: 88, 26

我有上面的错误。有没有人知道为什么它失败了这个规范数据集?

1 个答案:

答案 0 :(得分:2)

  

编辑:在ergm GitHub Fixed the "nominations" attribute of the sampson dataset.上查看两周前的最新帖子   这是现在已修复的sampson数据集中的错误   GitHub版本,但尚未更新为CRAN。

它失败了,因为sampson数据集的边缘属性nominations只有26个值,即使数据集中有88个边。当intergraph尝试转换为igraph时,它会尝试使用asDF()将边缘属性绑定到边缘列表,此步骤将失败。很简单的是删除边缘属性,如下所示:

smplk<-samplike

delete.edge.attribute(smplk, "nominations")

asIgraph(smplk)

IGRAPH dca72f1 D--- 18 88 -- 
+ attr: cloisterville (v/l), group (v/c), na (v/l), vertex.names
| (v/c), na (e/l)
...

从文档中我不清楚这个属性应该如何映射到边缘列表,但是如果可以确定它可以单独添加set.edge.attribute