从 igraph 中的图形中删除选定的短路径
Delete selected short paths from a graph in igraph
尊敬的社区成员:
我想问一下是否有办法选择在 igraph 上绘制哪些节点。我正在 运行 宁以下代码:
library(igraph)
g <- graph.adjacency(
as.matrix(as.dist(cor(t(POS_testing), method="pearson"))),
mode="undirected",
weighted=TRUE,
diag=FALSE
)
g <- simplify(g, remove.multiple=TRUE, remove.loops=TRUE)
g <- delete_edges(g, E(g)[which(E(g)$weight<0.9)])
查看我的顶点:
V(g)$comp <- components(g)$membership
V(g)$comp
[1] 1 2 3 4 3 5 6 7 3 8 9 10 11 12 13 14 15 16 3 3 3 17 18 19 20 15 3 21 3
[30] 3 3 3 22 23 3 3 3 3 24 25 3 26 27 28 3 29 3 3 3 30 31 3 3 3 3 3 3 32
[59] 3 33 3 3 34 35 3 3 28 28 36 37 38 3 39 28 3 3 3 3 40 21 21 3 41 3 3 42 3
[88] 3 3 3 3 3 43 44 3 45 3 46 3 47 48 3 3 3 3 3 3 49 3 3 3 3 50 3 3 3
[117] 3 51 3 3 52 53 52 52 54 55 52 3 56 57 58 55 59 3 60 61 3 62 3 63 64 65 66 67 3
[146] 3 3 3 68 3 69 64 70 71 3 72 3 73 74 3 3 75 3 3 3 3 32 76 3 77 3 78 3 3
[175] 79 80 3 81 82 3 3 73 3 3 3 83 84 85 73 3 3 3 3 3 86 32 87
现在,运行使用我在此处找到的命令: 我可以获得分配给数字“3”的顶点。
g <- induced_subgraph(g, V(g)$comp == 3)
V(g)$comp
[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[45] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[89] 3 3 3 3 3 3 3 3
但是,我想选择的不仅仅是分配给 3 的顶点。我想选择显示 3、21、28、32、52 和 73。
我运行进入这个网站:http://igraph.org/r/doc/delete_vertices.html
所以,我 运行 代码:
t <- delete_vertices(g, comps$Var1)
其中 comps$Var1 是我要删除的所有数字(如上所示)的数字向量(即 1、2、4、5 等)。它不起作用。当我 运行 V(t)$comp
时,我仍然弹出所有 197 个数字。
接下来我尝试手动填写 & 运行 以下代码(3 出现 96 次,21 出现 3 次,等等):
V(g)$comp <- c(rep(3, 96), rep(21, 3), rep(28, 4), rep(32, 3), rep(52, 4), rep(73, 3)).
这也没有用。
接下来我尝试 add_edges 代替(仅这些以查看是否可行):
t <- add_edges(g, c(which(V(g)$comp == 3), which(V(g)$comp == 21), which(V(g)$comp == 28)))
这仍然产生了上面所有的数字,并没有选择性地选择这些数字让我作图。
我也试过像这样使用 & 运算符:
g <- induced_subgraph(g, c(V(g)$comp == 3 & V(g)$comp == 21 & V(g)$comp ==29))
这也保留了我所有的顶点。
我没有想法,我想问这个社区这是否可能。非常感谢您的帮助。
我们需要 POS_testing
来重现您的示例,但试试看:
g <- induced_subgraph(g, V(g)$comp %in% c(3, 21, 28, 32, 52, 73))
尊敬的社区成员:
我想问一下是否有办法选择在 igraph 上绘制哪些节点。我正在 运行 宁以下代码:
library(igraph)
g <- graph.adjacency(
as.matrix(as.dist(cor(t(POS_testing), method="pearson"))),
mode="undirected",
weighted=TRUE,
diag=FALSE
)
g <- simplify(g, remove.multiple=TRUE, remove.loops=TRUE)
g <- delete_edges(g, E(g)[which(E(g)$weight<0.9)])
查看我的顶点:
V(g)$comp <- components(g)$membership
V(g)$comp
[1] 1 2 3 4 3 5 6 7 3 8 9 10 11 12 13 14 15 16 3 3 3 17 18 19 20 15 3 21 3
[30] 3 3 3 22 23 3 3 3 3 24 25 3 26 27 28 3 29 3 3 3 30 31 3 3 3 3 3 3 32
[59] 3 33 3 3 34 35 3 3 28 28 36 37 38 3 39 28 3 3 3 3 40 21 21 3 41 3 3 42 3
[88] 3 3 3 3 3 43 44 3 45 3 46 3 47 48 3 3 3 3 3 3 49 3 3 3 3 50 3 3 3
[117] 3 51 3 3 52 53 52 52 54 55 52 3 56 57 58 55 59 3 60 61 3 62 3 63 64 65 66 67 3
[146] 3 3 3 68 3 69 64 70 71 3 72 3 73 74 3 3 75 3 3 3 3 32 76 3 77 3 78 3 3
[175] 79 80 3 81 82 3 3 73 3 3 3 83 84 85 73 3 3 3 3 3 86 32 87
现在,运行使用我在此处找到的命令:
g <- induced_subgraph(g, V(g)$comp == 3)
V(g)$comp
[1] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[45] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[89] 3 3 3 3 3 3 3 3
但是,我想选择的不仅仅是分配给 3 的顶点。我想选择显示 3、21、28、32、52 和 73。
我运行进入这个网站:http://igraph.org/r/doc/delete_vertices.html 所以,我 运行 代码:
t <- delete_vertices(g, comps$Var1)
其中 comps$Var1 是我要删除的所有数字(如上所示)的数字向量(即 1、2、4、5 等)。它不起作用。当我 运行 V(t)$comp
时,我仍然弹出所有 197 个数字。
接下来我尝试手动填写 & 运行 以下代码(3 出现 96 次,21 出现 3 次,等等):
V(g)$comp <- c(rep(3, 96), rep(21, 3), rep(28, 4), rep(32, 3), rep(52, 4), rep(73, 3)).
这也没有用。
接下来我尝试 add_edges 代替(仅这些以查看是否可行):
t <- add_edges(g, c(which(V(g)$comp == 3), which(V(g)$comp == 21), which(V(g)$comp == 28)))
这仍然产生了上面所有的数字,并没有选择性地选择这些数字让我作图。
我也试过像这样使用 & 运算符:
g <- induced_subgraph(g, c(V(g)$comp == 3 & V(g)$comp == 21 & V(g)$comp ==29))
这也保留了我所有的顶点。
我没有想法,我想问这个社区这是否可能。非常感谢您的帮助。
我们需要 POS_testing
来重现您的示例,但试试看:
g <- induced_subgraph(g, V(g)$comp %in% c(3, 21, 28, 32, 52, 73))