为边的名称子集 igraph 对象
Subset an igraph object for the name of the edge
考虑一个将每个变量相互关联的数据框:
iris_cor <- structure(list(x = c("Sepal.Length", "Sepal.Length", "Sepal.Length",
"Sepal.Length", "Sepal.Width", "Sepal.Width", "Sepal.Width",
"Sepal.Width", "Petal.Length", "Petal.Length", "Petal.Length",
"Petal.Length", "Petal.Width", "Petal.Width", "Petal.Width",
"Petal.Width"), y = c("Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width"), r = c(NA, -0.117569784133002, 0.871753775886583,
0.817941126271576, -0.117569784133002, NA, -0.42844010433054,
-0.366125932536439, 0.871753775886583, -0.42844010433054, NA,
0.962865431402796, 0.817941126271576, -0.366125932536439, 0.962865431402796,
NA)), row.names = c(NA, -16L), class = c("tbl_df", "tbl", "data.frame"
), .Names = c("x", "y", "r"))
如果我想制作网络图,我会执行以下操作:
library(igraph)
iris_igraph <- graph_from_data_frame(iris_cor)
现在,如果我只对涉及 Sepal.Length
的相关性感兴趣,我不清楚如何有效地提取该信息。尝试这两种方法都不成功。第一个是因为错误,第二个是因为我只得到 Sepal.Length
的第一个实例,而不是全部:
> subgraph.edges(iris_igraph, E(iris_igraph)[name == "Sepal.Length"])
Error in eval(x$expr, data, x$env) : object 'name' not found
>
> subgraph.edges(iris_igraph, V(iris_igraph)[name == "Sepal.Length"])
IGRAPH dc7408b DN-- 1 1 --
+ attr: name (v/c), r (e/n)
+ edge from dc7408b (vertex names):
[1] Sepal.Length->Sepal.Length
这会产生所需的输出:
subgraph.edges(iris_igraph, E(iris_igraph)[1:4])
然而,当 igraph 对象的所需子集不按顺序或有很多 nodes/edges 时,编号索引不实用。
任何人都可以推荐一种方法来为边的名称对 igraph 对象进行子集化吗?
根据indexing edge sequences,您可以使用特殊函数inc
进行边缘子集化,其中:
获取一个顶点序列,并选择顶点序列中至少有一个入射顶点的所有边。
E(iris_igraph)[inc('Sepal.Length')]
#+ 7/16 edges (vertex names):
#[1] Sepal.Length->Sepal.Length Sepal.Length->Sepal.Width Sepal.Length->Petal.Length
#[4] Sepal.Length->Petal.Width Sepal.Width ->Sepal.Length Petal.Length->Sepal.Length
#[7] Petal.Width ->Sepal.Length
Select 来自 Sepal.Length
的边:
E(iris_igraph)[from('Sepal.Length')]
#+ 4/16 edges (vertex names):
#[1] Sepal.Length->Sepal.Length Sepal.Length->Sepal.Width Sepal.Length->Petal.Length
#[4] Sepal.Length->Petal.Width
Select 边缘到 Sepal.Length
:
E(iris_igraph)[to('Sepal.Length')]
#+ 4/16 edges (vertex names):
#[1] Sepal.Length->Sepal.Length Sepal.Width ->Sepal.Length Petal.Length->Sepal.Length
#[4] Petal.Width ->Sepal.Length
考虑一个将每个变量相互关联的数据框:
iris_cor <- structure(list(x = c("Sepal.Length", "Sepal.Length", "Sepal.Length",
"Sepal.Length", "Sepal.Width", "Sepal.Width", "Sepal.Width",
"Sepal.Width", "Petal.Length", "Petal.Length", "Petal.Length",
"Petal.Length", "Petal.Width", "Petal.Width", "Petal.Width",
"Petal.Width"), y = c("Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width", "Sepal.Length", "Sepal.Width", "Petal.Length",
"Petal.Width"), r = c(NA, -0.117569784133002, 0.871753775886583,
0.817941126271576, -0.117569784133002, NA, -0.42844010433054,
-0.366125932536439, 0.871753775886583, -0.42844010433054, NA,
0.962865431402796, 0.817941126271576, -0.366125932536439, 0.962865431402796,
NA)), row.names = c(NA, -16L), class = c("tbl_df", "tbl", "data.frame"
), .Names = c("x", "y", "r"))
如果我想制作网络图,我会执行以下操作:
library(igraph)
iris_igraph <- graph_from_data_frame(iris_cor)
现在,如果我只对涉及 Sepal.Length
的相关性感兴趣,我不清楚如何有效地提取该信息。尝试这两种方法都不成功。第一个是因为错误,第二个是因为我只得到 Sepal.Length
的第一个实例,而不是全部:
> subgraph.edges(iris_igraph, E(iris_igraph)[name == "Sepal.Length"])
Error in eval(x$expr, data, x$env) : object 'name' not found
>
> subgraph.edges(iris_igraph, V(iris_igraph)[name == "Sepal.Length"])
IGRAPH dc7408b DN-- 1 1 --
+ attr: name (v/c), r (e/n)
+ edge from dc7408b (vertex names):
[1] Sepal.Length->Sepal.Length
这会产生所需的输出:
subgraph.edges(iris_igraph, E(iris_igraph)[1:4])
然而,当 igraph 对象的所需子集不按顺序或有很多 nodes/edges 时,编号索引不实用。
任何人都可以推荐一种方法来为边的名称对 igraph 对象进行子集化吗?
根据indexing edge sequences,您可以使用特殊函数inc
进行边缘子集化,其中:
获取一个顶点序列,并选择顶点序列中至少有一个入射顶点的所有边。
E(iris_igraph)[inc('Sepal.Length')]
#+ 7/16 edges (vertex names):
#[1] Sepal.Length->Sepal.Length Sepal.Length->Sepal.Width Sepal.Length->Petal.Length
#[4] Sepal.Length->Petal.Width Sepal.Width ->Sepal.Length Petal.Length->Sepal.Length
#[7] Petal.Width ->Sepal.Length
Select 来自 Sepal.Length
的边:
E(iris_igraph)[from('Sepal.Length')]
#+ 4/16 edges (vertex names):
#[1] Sepal.Length->Sepal.Length Sepal.Length->Sepal.Width Sepal.Length->Petal.Length
#[4] Sepal.Length->Petal.Width
Select 边缘到 Sepal.Length
:
E(iris_igraph)[to('Sepal.Length')]
#+ 4/16 edges (vertex names):
#[1] Sepal.Length->Sepal.Length Sepal.Width ->Sepal.Length Petal.Length->Sepal.Length
#[4] Petal.Width ->Sepal.Length