R igraph ancestors python

ε祈祈猫儿з 提交于 2019-12-11 06:38:43

问题


I have a network like in the diagram. In python there is the ancestors function. When i use it on node 5, it will provide list of nodes 1,2 and 3. what is an equivalent function in igraph R? I tried subcomponent but it didn't work for me.

Also my actual network is quiet long and I don't want to use parent or child function as I don't know degree in every case


回答1:


The R function is neighborhood with mode="in": http://igraph.org/r/doc/neighborhood.html E.g.

g1 <- graph(c(1,4, 1,2, 1,3, 3,2, 2,5))
neighborhood(g1, 5, order=vcount(g1), mode="in")[[1]]
# [1] 5 2 1 3

This will also include the queried vertex itself, but it is easy to remove that:

setdiff(neighborhood(g1, 5, order=vcount(g1), mode="in")[[1]], 5)
# [1] 2 1 3



回答2:


Using the neighborhood function @GaborCsardi suggested, you can recursively get all the ancestors of a node:

# Warning, only works on directed graphs!
ancestors <- function(node, graph) {
  parents <- neighborhood(graph, order=1, nodes=node, mode="in")[[1]][-1]
  if (length(parents) == 0) {
    NULL
  } else {
    theirParents <- unlist(sapply(parents, ancestors, graph))
    unique(c(parents, theirParents))
  }
}

And now we can test it on your example graph:

> g1 <- graph(c(1,4, 1,2, 1,3, 3,2, 2,5))
> ancestors(5, g1)
[1] 2 1 3
> ancestors(2, g1)
[1] 1 3
> ancestors(1, g1)
NULL
> 


来源:https://stackoverflow.com/questions/22800220/r-igraph-ancestors-python

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!