批量操作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