如何从顶点列表中检索原始图
How to retrieve the original graph from a vertex list
问题
igraph
包是否提供了一个接口来从顶点的子选择中检索原始图形?肯定有一些内部方法可以做到这一点,因为一个简单的 print
显示了图中的顶点总数以及所选顶点的数量,并且通过逆向工程我能够得到原始图,但我想知道是否有 API 支持的方法而不是依赖内部命令。
代码胜于雄辩,所以这就是我的意思:
library(igraph)
G <- make_ring(10)
(v <- V(G)[1:3])
### This output tells me that `v` "knows" about the graph it is taken from
### (namely that it has 10 vertices)
## + 3/10 vertices, from 3fe4e83:
## [1] 1 2 3
相关部分可摘自igraph:::print.igraph.vs
### igraph:::print.igraph.vs
graph <- get_vs_graph(x)
### igraph:::get_vs_graph
at <- attr(seq, "env")
if (class(at) == "weakref") {
weak_ref_key(at)$me
}
也就是说,我可以这样做:
all.equal(G, igraph:::get_vs_graph(v))
## TRUE
当然我们使用的是内部函数。所以我想知道 API 是否会提供一种获取原始图形的专用方法,或者这是否是不可预见的?
为什么?
实际上,我有一个全部来自不同图形的顶点序列列表。理想情况下,我想得到我的列表中的顶点数与相应原始图中的顶点数的比率:
set.seed(1)
Gs <- lapply(10 ^ (1:4), make_ring)
Vs <- lapply(Gs, function(G) V(G)[seq(1, sample(gorder(G), 1))])
sapply(Vs, function(v) length(v) / gorder(igraph:::get_vs_graph(v)))
## [1] 0.9000 0.6800 0.6790 0.9725
确实,igraph.vs
个对象(还有 igraph.es
)包含指向原始图形的弱引用,我们在内部使用 igraph:::get_vs_graph()
来获取原始图形图。
我可以想象在未来的某个版本中将它公开为一个 public 函数;请在我们的 issue tracker 中提出问题,我们可以在问题跟踪器中进一步讨论其影响。
问题
igraph
包是否提供了一个接口来从顶点的子选择中检索原始图形?肯定有一些内部方法可以做到这一点,因为一个简单的 print
显示了图中的顶点总数以及所选顶点的数量,并且通过逆向工程我能够得到原始图,但我想知道是否有 API 支持的方法而不是依赖内部命令。
代码胜于雄辩,所以这就是我的意思:
library(igraph)
G <- make_ring(10)
(v <- V(G)[1:3])
### This output tells me that `v` "knows" about the graph it is taken from
### (namely that it has 10 vertices)
## + 3/10 vertices, from 3fe4e83:
## [1] 1 2 3
相关部分可摘自igraph:::print.igraph.vs
### igraph:::print.igraph.vs
graph <- get_vs_graph(x)
### igraph:::get_vs_graph
at <- attr(seq, "env")
if (class(at) == "weakref") {
weak_ref_key(at)$me
}
也就是说,我可以这样做:
all.equal(G, igraph:::get_vs_graph(v))
## TRUE
当然我们使用的是内部函数。所以我想知道 API 是否会提供一种获取原始图形的专用方法,或者这是否是不可预见的?
为什么?
实际上,我有一个全部来自不同图形的顶点序列列表。理想情况下,我想得到我的列表中的顶点数与相应原始图中的顶点数的比率:
set.seed(1)
Gs <- lapply(10 ^ (1:4), make_ring)
Vs <- lapply(Gs, function(G) V(G)[seq(1, sample(gorder(G), 1))])
sapply(Vs, function(v) length(v) / gorder(igraph:::get_vs_graph(v)))
## [1] 0.9000 0.6800 0.6790 0.9725
确实,igraph.vs
个对象(还有 igraph.es
)包含指向原始图形的弱引用,我们在内部使用 igraph:::get_vs_graph()
来获取原始图形图。
我可以想象在未来的某个版本中将它公开为一个 public 函数;请在我们的 issue tracker 中提出问题,我们可以在问题跟踪器中进一步讨论其影响。