批量操作igraph网络的顶点属性

批量操作igraph网络的顶点属性,r,graph,igraph,R,Graph,Igraph,我有一个igraph网络图ig,如下所示 library(igraph) edges <- data.frame(from = c("X", "U", "V", "M", "G", "G1", "G2", "G3", "G4a", "G3", "G4b", "G5b", "H", "R", "R1", "R2", "O", "O1", "O2", "H", "Y", "N",

我有一个
igraph
网络图
ig
,如下所示

library(igraph)

edges <- data.frame(from = c("X", "U", "V", "M", "G", "G1", "G2", "G3", "G4a", "G3", "G4b", 
                             "G5b", "H", "R", "R1", "R2", "O", "O1", "O2", "H", "Y", "N", 
                             "J", "K"),
                    to = c("G", "X", "U", "K", "G1", "G2", "G3", "G4a", "J", "G4b", "G5b", 
                           "H", "R", "R1", "R2", "O", "O1", "O2", "O3", "F", "G", "K", "R", 
                           "F"))

nodes <- data.frame(key = c("G", "X", "Y", "U", "V", "K", "M", "N", "G1", "G2", "G3", "G4a", 
                            "J", "G4b", "G5b", "H", "R", "R1", "R2", "O", "O1", "O2", "O3", 
                            "F"),
                    type = c("G", "D", "T", "D", "T", "G", "T", "T", "D", "D", "D", "D", 
                             "D", "D", "D", "D", "G", "D", "D", "D", "D", "D", "D", "G"),
                    f1 = c("X", "U", NA, "V", NA, "M", NA, NA, "G", "G1", "G2", "G3", 
                           "G4a", "G3", "G4b", "G5b", "H", "R", "R1", "R2", "O", "O1", "O2", 
                           "H"),
                    f2 = c("Y", NA, NA, NA, NA, "N", NA, NA, NA, NA, NA, NA, NA, NA, NA, 
                           NA, "J", NA, NA, NA, NA, NA, NA, "K"),
                    inter = c(0, 1, NA, 1, NA, 0, NA, NA, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 
                              1, 1, 1, 1, 0))

ig <- graph_from_data_frame(d = edges, directed = TRUE, vertices = nodes)
igpaths <- list(structure(c(V = 5L, U = 4L, X = 2L), class = "igraph.vs"), 
                structure(21:23, .Names = c("O1", "O2", "O3"), class = "igraph.vs"), 
                structure(c(G = 1L, G1 = 9L, G2 = 10L, G3 = 11L, G4a = 12L, 
                            J = 13L), class = "igraph.vs"), 
                structure(c(G = 1L, G1 = 9L, G2 = 10L, G3 = 11L, G4b = 14L, 
                            G5b = 15L, H = 16L), class = "igraph.vs"), 
                structure(17:20, .Names = c("R", "R1", "R2", "O"), class = "igraph.vs"))

igpaths
[[1]]
+ 3/? vertices, named (deleted):
[1] V U X

[[2]]
+ 3/? vertices, named (deleted):
[1] O1 O2 O3

[[3]]
+ 6/? vertices, named (deleted):
[1] G   G1  G2  G3  G4a J  

[[4]]
+ 7/? vertices, named (deleted):
[1] G   G1  G2  G3  G4b G5b H  

[[5]]
+ 4/? vertices, named (deleted):
[1] R  R1 R2 O 
根据这些
igraph.vs
对象,我想操作
ig
中的一些顶点属性

list.vertex.attributes(ig)
[1] "name"   "type"   "f1"     "f2"     "inter"  "retain"

vtosum <- c("inter")
vtocopy <- c("f1", "f2", "retain")
2.我想将
igraph.vs
中最后一个节点的
vtosum
属性值替换为该特定
igraph.vs
对象中相同属性值的总和

例如,在
igpath[[3]]
中,顶点
J
中的
inter
值应为5

igpaths[[3]]
+ 6/? vertices, named (deleted):
[1] G   G1  G2  G3  G4a J  
sum(V(ig)$inter[which(names(V(ig)) %in% names(igpaths[[3]]), useNames = T)])
[1] 5
有没有更优雅的方法来实现这一点

igpaths[[3]]
+ 6/? vertices, named (deleted):
[1] G   G1  G2  G3  G4a J  
sum(V(ig)$inter[which(names(V(ig)) %in% names(igpaths[[3]]), useNames = T)])
[1] 5