首页 文章

“R社交网络分析实验室”(斯坦福大学教程):对图形对象/网络类的困惑

提问于
浏览
2

如果这个问题看起来多余,我很抱歉,但是我开始使用R及其SNA工具进行课程,并且已经运行了几个不同的教程/实验室来习惯 . 总是被推荐的资源是斯坦福大学的SNA实验室,但即使只是运行入门实验室也会返回一些让我感到困惑的错误 . 带注释的完整R代码可在此处获得:

http://sna.stanford.edu/lab.php?l=1

第一部分是相当简单的,我理解发生了大部分事情 . 但是一旦我尝试将顶点属性添加到图形(第236行),我就遇到了我们刚创建的图形对象“krack_full”的问题 . 运行这个...:

for (i in V(krack_full)) {
    for (j in names(attributes)) {
        krack_full <- set.vertex.attribute(krack_full, 
                                           j, 
                                           index = i, 
                                           attributes[i + 1, j])
    }
}

...返回:

Error in set.vertex.attribute(krack_full, j, index = i, attributes[i +  : 
  unused argument (index = i)

所以我认为,很好,使用他们概述的第二种方法,然后通过:

attributes = cbind(1:length(attributes[,1]), attributes)
krack_full <- graph.data.frame(d = krack_full_nonzero_edges, 
+ vertices = attributes)

这似乎工作得很好 - 除了它确实创建一个名为"(1:length(attributes[, 1])"的属性...

> summary(krack_full)
IGRAPH DN-- 21 232 -- 
attr: name (v/c), 1:length(attributes[, 1]) (v/n), AGE (v/n), TENURE (v/n), LEVEL (v/n), DEPT
  (v/n), advice_tie (e/n), friendship_tie (e/n), reports_to_tie (e/n)

所以,一切都表现得很奇怪 . 最后,当我尝试在下一步中获取顶点属性时,我遇到了关于对象类的一些错误:

> get.vertex.attribute(krack_full, 'AGE')
Error in get.vertex.attribute(krack_full, "AGE") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'TENURE')
Error in get.vertex.attribute(krack_full, "TENURE") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'LEVEL')
Error in get.vertex.attribute(krack_full, "LEVEL") : 
  get.vertex.attribute requires an argument of class network.
> get.vertex.attribute(krack_full, 'DEPT')
Error in get.vertex.attribute(krack_full, "DEPT") : 
  get.vertex.attribute requires an argument of class network.

......从现在开始,几乎没有什么能像我预期的那样发挥作用 . 所以我怀疑导入数据的图形对象“krack_full”在某种程度上不是它应该是什么......?

再一次,如果这是我正在制作的一个完整的新手错误,我很抱歉,但如果你能指出我正确的方向,我将不胜感激 . 我想更好地掌握这里发生的事情 .

非常感谢你 .

2 回答

  • 2

    我强烈怀疑您尝试遵循的教程是为igraph版本0.5.4或更早版本开发的 . 那时,igraph对象中的顶点和边是从零而不是一个索引,并且教程似乎解释了这一点,从教程中的以下注释判断:

    # IMPORTANT NOTE: Unlike in most languages, R objects are numbered
    # from 1 instead of 0, so if you want the first element in a
    # vector, you would reference it by vector_name[1]. HOWEVER,
    # igraph objects are numbered starting from 0. This can lead to 
    # lots of confusion, since it's not always obvious at first which 
    # objects are native to R and which belong to igraph.
    

    自从igraph 0.6以来,这已经不再适用了; igraph的R接口中的顶点和边缘从1开始索引,就像每个其他表现良好的R对象一样 . 这里有两个选项(除了要求教程的作者为igraph 0.6更新它):

    • 您可以修改教程中的命令,以确保每个顶点和边索引都是从1开始的;也就是说,如果他们出于某种原因从某个地方的索引中减去1,则只省略减法,同样,如果他们在某处将索引加1,则省略加法 . 这也是检查你是否真正理解你在做什么的好方法:)

    • 使用 igraph0 包而不是 igraph . igraph0 包与 igraph 相同,但使用从零开始的索引来确保旧的igraph代码在过渡期间仍然有效 . 但是,您应该继续使用 igraph 进行新的分析项目 .

  • 0

    对于功能

    get.vertex.attribute
    

    尝试新功能

    vertex_attr
    

    代替

相关问题