r - R 中的函数返回网络中的祖先和子代

标签 r networking children ancestor

我想在R中创建一个函数“f”,它在条目中具有个体和个体之间的边的data.frame(例如称为A2),并且返回另一个仅包含“祖先”和“的data.frame” A2的“ child ”,也是祖先的祖先和 child 的 child !

为了说明我的复杂问题:

 library(visNetwork)
 nodes <- data.frame(id = c(paste0("A",1:5),paste0("B",1:3)),
                label = c(paste0("A",1:5),paste0("B",1:3)))
 edges <- data.frame(from = c("A1","A1","A2","A3","A4","B1","B2"),
                to = c("A2","A3","A4","A4","A5","B3","B3"))
 visNetwork(nodes, edges) %>% 
   visNodes(font = list(size=45)) %>% 
    visHierarchicalLayout(direction = "LR", levelSeparation = 500)

enter image description here

在此示例中,data.frame 包含 2 个不同的独立网络:1 个带有“A”的网络,另一个带有“B”的网络。

我想实现一个函数 f(data=edges, indiv="A2") ,它返回一个 data.frame,其中包含与“A”网络相关的所有 data.frame 边缘行:

f(edges,"A2") 将返回 data.frame 边缘的提取内容

 head(f(edges,"A2"))
 #  from to
 #1   A1 A2
 #2   A1 A3
 #3   A2 A4
 #4   A3 A4
 #5   A4 A5

我希望您能清楚地帮助我。

非常感谢!

最佳答案

您可以尝试仅过滤连接到 A2 的节点(即距离不等于 Inf

library(tidygraph)
edges <- data.frame(from = c("A1","A1","A2","A3","A4","B1","B2"),
                    to = c("A2","A3","A4","A4","A5","B3","B3"))
as_tbl_graph(edges) %>% 
  filter(is.finite(node_distance_to(name=="A2", mode="all")))

这给出了

# A tbl_graph: 5 nodes and 5 edges
#
# A directed acyclic simple graph with 1 component
#
# Node Data: 5 x 1 (active)
   name
  <chr>
1    A1
2    A2
3    A3
4    A4
5    A5
#
# Edge Data: 5 x 2
   from    to
  <int> <int>
1     1     2
2     1     3
3     2     4
# ... with 2 more rows

关于r - R 中的函数返回网络中的祖先和子代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47239266/

相关文章:

php - 从 Woocommerce 3 中的可变产品获取变体 ID

R - 为什么 grep 不返回多个索引?

java - 如何使用 SNMP 监控 JVM 和应用程序

c - he->h_addr_list[0] 总是默认接口(interface)吗?

Angular 10 匹配器 child 不显示 child

android - 禁用电源按钮...或...在 Android 幼儿应用程序中恢复全屏

r - 如何使用 data.table 计算 R 中的转换表?

r - 如何在 R 中的 for 循环中实现可变步长?

r - 只有一个项目的分组选择输入

sockets - FIN 数据包乱序并覆盖?