2010-07-22 20 views
22

Nói rằng tôi có ví dụ biểu đồ này, tôi muốn tìm các cạnh nối với đỉnh 'a'Làm cách nào để tìm các cạnh của một đỉnh bằng igraph và R?

d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'), 
       p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e')) 

library(igraph) 
g <- graph.data.frame(d, directed=FALSE) 
print(g, e=TRUE, v=TRUE) 

tôi có thể dễ dàng tìm thấy một đỉnh:

V(g)[V(g)$name == 'a' ] 

Nhưng tôi cần phải tham khảo tất cả các cạnh kết nối với đỉnh 'a'.

Trả lời

25

Xem tài liệu trên igraph iterators; đặc biệt là các hàm from() và to().

Trong ví dụ của bạn, "a" là V (g) [0], vì vậy để tìm tất cả các cạnh kết nối với "a":

E(g) [ from(0) ] 

Kết quả:

[0] b -- a 
[1] c -- a 
[2] d -- a 
+0

Lưu ý cho người dùng Python-igraph: Tương đương với giải pháp này là sử dụng EdgeSeq của [chọn] (http: // igraph Hàm .org/python/doc/igraph.EdgeSeq-class.html # select), nhưng nó hiện đang lỗi như đã đề cập trong [báo cáo lỗi] này (https://github.com/igraph/python-igraph/issues/30). Cách giải quyết được đề xuất để có được các ID cạnh của đỉnh X là sử dụng 'g.es [g.incident (x)]'. – JeeYem

4

Nếu bạn làm không biết chỉ số của đỉnh, bạn có thể tìm thấy nó bằng cách sử dụng match() trước khi sử dụng hàm from().

idx <- match("a", V(g)$name) 
E(g) [ from(idx) ] 
3

Tìm thấy một phiên bản đơn giản kết hợp hai nỗ lực ở trên cũng có thể hữu ích.

E(g)[from(V(g)["name"])] 
1

tôi sử dụng chức năng này để nhận số cạnh cho tất cả các nút:

sapply(V(g)$name, function(x) length(E(g)[from(V(g)[x])])) 
Các vấn đề liên quan