提取tidygraph中特定节点的邻域/子图

提取tidygraph中特定节点的邻域/子图,r,igraph,network-analysis,tidygraph,R,Igraph,Network Analysis,Tidygraph,我在摸索某些在igraph中相对简单的Tidygraph操作时遇到了一些困难 特别是,我想以不同的顺序分析特定的社区。我想我需要使用变形,但我只是没有让它工作 library(tidygraph) library(ggraph) iGraph的实现工作如下: 提取节点x的邻域 v <- net %>% tidygraph::as.igraph() %>% igraph::neighborhood(nodes = "x", order = 1) 我如何使用ti

我在摸索某些在igraph中相对简单的Tidygraph操作时遇到了一些困难

特别是,我想以不同的顺序分析特定的社区。我想我需要使用变形,但我只是没有让它工作

library(tidygraph)
library(ggraph)

iGraph的实现工作如下: 提取节点x的邻域

v <- net %>% 
  tidygraph::as.igraph() %>% 
  igraph::neighborhood(nodes = "x", order = 1)

我如何使用tidygraph来实现这一点? 以下实现返回相同的错误:

net %>% 
  tidygraph::morph(to_local_neighborhood, node = "x", order = 1, mode = "all")

net %>% 
  to_local_neighborhood(node = "x", order = 1, mode = "all")
if(is.numeric(v)&&any(v<0))中的
错误{:缺少需要TRUE/FALSE的值

如果您对tidygraph API不太熟悉,那么使用一些基本R函数要比使用更迂回一些,但是我们可以获得节点的索引,用于要求
节点
参数为数字

库(潮汐图)
#>附加包:“tidygraph”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤器
图书馆(ggraph)
#>加载所需包:ggplot2
#范例
净百分比
tidygraph::as_tbl_graph()
#获取作为整数的行名称索引,因为tidygraph要求
节点\u tbl附加包:“tidygraph”
#>以下对象已从“package:stats”屏蔽:
#> 
#>滤器
图书馆(ggraph)
#>加载所需包:ggplot2
#范例
净百分比
tidygraph::as_tbl_graph()
净%>%
潮汐图::转换(到本地社区),
节点=哪个(.N()$name==“x”),
订单=1,
mode=“all”)%%>%
ggraph(layout=“welly”)+
geom_边缘_链接()+
几何节点点(尺寸=10,填充=“白色”,形状=21)+
geom_节点_文本(aes(标签=名称))+
主题图()


由(v0.3.0)于2020-07-03创建

似乎不必按节点的名称命名,而必须按位置命名。在您的示例中,节点x是第7个。我目前没有找到比过滤节点、拉出该位置并使用该位置获得子图更好的方法。您还可以使用
dplyr
-type函数
filter
node\u是相邻的
@camille这很不幸。而
node\u是相邻的
将适用于此用例(尽管我还没有测试)。此解决方案似乎不适用于大于1的订单(例如获取邻居的邻居)。是的,可能有更好的方法,不确定。为什么不直接使用
igraph
函数呢?在
tidygraph
类和
igraph
类之间切换似乎很容易。如果将来有人发现这一点,请参阅以了解有关解决方案的更多详细信息。我将尝试稍后发布最终解决方案。
v <- net %>% 
  tidygraph::as.igraph() %>% 
  igraph::neighborhood(nodes = "x", order = 1)
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()
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