我想在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)
在此示例中,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/