2016-10-31 2 views
-1

edge_connectivity 함수가있는 모든 노드에 대해 가장자리 연결 판독 값을 igraph에 얻을 수 있도록 그래프 객체를 가지고 있습니다. 출력은 다음과 같아야합니다그래프 객체의 edge_connectivity에 대한 적용 사례

edge_connectivity(di, "10001", "12256") 
[1] 2 
edge_connectivity(di, "10001", "8496") 
[1] 2 
edge_connectivity(di, "10001", "8558") 
[1] 2 

* 노드 이름을 무작위로 생성되는 정수

나는 그래도 lapply 기능이 제대로 동작하지 않습니다. 여기에 내가 수행 하려던 코드가 있습니다 :

library(igraph) 
digraph<-read.csv('1999.csv') 
di<-graph.data.frame(digraph) 
edge_connectivity<-lapply(di, function(x) x) 

나는 이것이 옳지 않다는 것을 알고 있습니다. 다음과 같이해야합니다 : connectivity<-lapply(V(di), function(x) length(edge_connectivity(di))?

그러나 edge_connectivity 함수는 원본 인수와 대상 인수가 있거나 전체 네트워크에서 비워 두어야하므로 올바른 방법도 아닙니다. 나는 그 자체로 네트워크를 가로 지르는 방법을 모른다.

답변

1

네트워크의 노드 쌍마다 에지 연결 스코어를 얻으려는 경우 모든 쌍의 조합을 찾아서 sapply과 함께 edge_connectivity과 함께 전달해야합니다. 나는 (벡터를 반환)을 원하고 lapply (목록을 반환)이 아니라고 생각한다. 두 경우 모두 구문이 같습니다.

랜덤 그래프 'g'를 사용하여 노드의 가능한 모든 쌍을 combn으로 찾습니다. 이것은 Nx2 매트릭스를 생성하는데, 여기서 N은 가능한 쌍의 총 수입니다.

g <- sample_gnp(25,0.5,directed=T)a 
c <- combn(V(g),2) 

가능한 노드 쌍 (c에서 열 예컨대 수)의 번호를 통해 ege_connectivity 함수를 적용 sapply 말한다. 쌍의 각 노드를 가져 오기 위해 각 열의 첫 번째 행과 두 번째 행을 인덱싱합니다.

sapply(1:ncol(c), function(x) edge_connectivity(g,c[1,x],c[2,x])) 

그래프의 각 노드 쌍에 대한 연결 점수를 반환합니다. sapply 함수의 구문에 유의하십시오. 이 함수는 첫 번째 인수 (1:ncol(c))의 각 요소에 적용됩니다. 여기서 요소는 함수의 x의 각 인스턴스를 바꿉니다.

+0

정말 고마워요! 이것은 내가 필요한 것입니다. 마지막 질문 : 조합을 생성 할 때 csv 가장자리 목록에서 정점의 원래 이름을 어떻게 든 유지할 수 있습니까? 그렇지 않으면 R은 연속적인 정수 값을 할당하고 큰 데이터 세트로 해석이 엉망이됩니다. – Jasmina

+0

'combn (V (g) $ name, 2)'는 숫자가 아닌 정점 이름을 사용합니다. – paqmo

관련 문제