2014-06-20 130 views
1

igraph的頂點序列似乎不是一個序列。例如:獲取頂點序列中的頂點

enter image description here

在V序列由V(module.net)是一個序列,因爲我可以通過[deg==1]訪問它。但是,當我嘗試peripheral[1]時,爲什麼它不起作用?對此有任何可能的解釋?

這個例子的數據集不容易被包含,對此抱歉。

//

我找到了答案,第一個頂點「MED24」的指數是4,而不是1,所以,如果我想要得到的第一個頂點,我必須這樣做peripheral[1]。但這似乎有點不合理。一個可複製的例子:

g = graph.ring(5) 
V(g)$name = c('node1', 'node2', 'node3','node4','node5') 
temp = V(g)[2:3] 

如果你想從臨時訪問「節點3」,你必須使用temp[3]代替temp[2]

enter image description here

+0

我無法複製你的錯誤: –

+0

@RussHyde你能分享你的測試工作嗎?你有沒有在你的序列中包含頂點1,然後用'[1]'索引? – MrFlick

+0

是的,對不起。我看到了我的方式的錯誤。 –

回答

0

我一直頂點序列和邊緣麻煩序列。這些對象上的索引操作符的問題是由矢量名稱搜索,而不是位置。因此peripheral[1]正在查看向量1是否在列表中,它不是提取列表中的第一個元素。

最好的我想出了將序列轉換爲一個簡單的向量和重新索引向量列表。例如

el <- cbind(letters[1:5], letters[c(2,3,5,1,4)]) 
gg <- graph.edgelist(el) 
p <- V(gg)[c(2,3)] 
V(gg)[as.vector(p)[1]] 

其實,如果你只是想提取特定頂點的名稱,然後

p$name[1] 

會工作。

+0

是你的方式工作。看我的補品。但是這有點不方便 – yliueagle

+0

@yliueagle看我的更新。如果你只是想要頂點的名字,那麼你可以使用'peripheral $ name [1]'。這可能更多你想要的。不需要'as.vector'。 – MrFlick