对于某些在igraph中相对简单的Tidygraph操作,我有些困惑。
特别是我想要分析不同级别的特定邻域。我认为我需要使用Morphs来实现这一点,但我还没有做到。
library(tidygraph)
library(ggraph)
net <- tibble::tibble(A = letters[1:6],
B = rep(c("x", "y"), each = 3)) %>%
tidygraph::as_tbl_graph()
例如,假设我有以下网络结构:
我想分析关于x的邻域。
net %>%
ggraph(layout = "nicely") +
geom_edge_link() +
geom_node_point(size = 10, fill = "white", shape = 21) +
geom_node_text(aes(label = name)) +
theme_graph()
iGraph的实现方法如下:
提取节点x的邻域。
v <- net %>%
tidygraph::as.igraph() %>%
igraph::neighborhood(nodes = "x", order = 1)
通过取消igraph.vs对象的列表构建子图
igraph::induced_subgraph(net, vids = unlist(v)) %>%
tidygraph::as_tbl_graph() %>%
ggraph(layout = "nicely") +
geom_edge_link() +
geom_node_point(size = 10, fill = "white", shape = 21) +
geom_node_text(aes(label = name)) +
theme_graph()
如何使用tidygraph实现这个功能?
以下实现返回相同的错误:
net %>%
tidygraph::morph(to_local_neighborhood, node = "x", order = 1, mode = "all")
net %>%
to_local_neighborhood(node = "x", order = 1, mode = "all")
Error in if (is.numeric(v) && any(v < 0)) { : missing value where TRUE/FALSE needed
dplyr
的函数filter
和node_is_adjacent
。 - camillenode_is_adjacent
对于这种用例可以工作(尽管我还没有测试过)。但似乎这个解决方案对于大于1的顺序是行不通的(例如,要获取邻居的邻居)。 - user131291igraph
函数呢?在tidygraph
类和igraph
类之间切换似乎很容易。 - camille