2012-07-25 76 views
1

您好我正在處理R中的大量數據,並且需要檢查一個結構是否由一個或多個節組成。 首先,我有辦法R結構中的節數

wayIds <- [way1, way2, way3, etc..] 

矢量然後我有每路

endWays 
      wayId firstNode lastNode 
     [1,] way1 node1  node2 
     [2,] way2 node4  node8 
     [3,] way3 node5  node1... 

兩者都是大的第一個和最後一個節點的矩陣。所以我需要一種方法來確定是否遵循連接結構有一個或多個部分的方式。例如

_|______/ 1 section (all the ways are connected) 
_|__ ____/ 2 sections (NOT all the ways are connected) 

所以,到現在爲止我能確定所有的開口端(那些在分支結束)爲例,很明顯,如果我只有兩個開放節點的解決方案是微不足道的。因此,我需要一種有效的方法來確定是否所有打開的節點都是相互連接的,而無需使用循環。

謝謝!

+2

你能提供與期望的結果的一個小例子? – digEmAll 2012-07-25 09:21:56

+0

理想情況下,將部分分組爲矢量,如第1節< - [way2,way5,way3],section2 < - [way1,way4],以便我可以執行進一步的分析。謝謝! – 2012-07-25 09:36:30

+0

這種方式是否有指導?我的意思是「node1 - > node2」等於「node2 - > node1」? (即方式是雙向的) – digEmAll 2012-07-25 09:56:25

回答

0

試試這個:

library(igraph) 

data <- read.table(text= 
'wayId firstNode endNode 
way1 node1 node2 
way2 node2 node4 
way3 node2 node3 
way4 node4 node3 
way5 node5 node6 
way6 node5 node8 
way7 node8 node7' 
,header=TRUE,sep=' ') 

# I reorder the columns before passing the data.frame to the function, 
# because the first 2 columns have to be node from and node to 
g <- graph.data.frame(data[,c(2,3,1)],directed=FALSE) 

# plot the graph (don't do it if your graph is really big) 
plot.igraph(g,vertex.label=V(g)$name, 
      vertex.size=30,vertex.label.cex=0.7, 
      vertex.shape='square') 

subGraphs <- decompose.graph(g,mode='strong') 

for(i in 1:length(subGraphs)){ 
    subGraph <- subGraphs[[i]] 

    message(paste('Sub graph:',i)) 
    # find vertices having just one connected node 
    openVertices <- V(subGraph)[sapply(as.vector(V(subGraph)),FUN=function(v){length(E(subGraph)[from(v) | to(v)]) == 1})] 

    message(paste('Open vertices:',toString(openVertices$name))) 

    # plot the sub-graph (don't do it if your graph is really big) 
    plot.igraph(subGraph,vertex.label=V(subGraph)$name, 
       vertex.size=30,vertex.label.cex=0.7, 
       vertex.shape='square') 
} 
+0

非常感謝!只有一個問題,你我怎麼才能得到圖的開放節點(只與一個元素連接的元素) – 2012-07-25 10:53:42

+0

@JorgePM:檢查我的編輯;) – digEmAll 2012-07-25 12:46:40

+0

好,再次感謝你! – 2012-07-25 13:20:27