将功能应用于igraph对象

时间:2020-03-26 11:35:53

标签: r function networking apply

我想学习如何使用applysapplylapply更有效地编码。虽然我了解它的基础知识,但我仍然缺乏直觉。具体来说,我想在图形对象上使用apply。是否可以使用以下功能之一实现下面的示例,如何实现?欢迎使用任何更有效的解决方案,因为我感兴趣的图形超过2Mio。节点,每个节点都有一条边。

# data
g <- make_graph(c(1, 2, 2, 3, 3, 4, 5, 6), directed = T)

# loop 
for(i in 1:length(V(g))){
  neigbours[[i]] <- adjacent_vertices(g, v= c(i), mode = "in")
} 

1 个答案:

答案 0 :(得分:2)

lapply不一定效率更高。但是您可以通过以下方法来提高效率:首先创建对象neigbours,而不是在每个for循环迭代中扩展它,而强制调用R的内存管理例程。

neigbours <- vector("list", length = length(V(g)))
for(i in 1:length(V(g))){
  neigbours[[i]] <- adjacent_vertices(g, v= c(i), mode = "in")
} 

neib2 <- lapply(seq_along(V(g)), function(i){
  adjacent_vertices(g, v = i, mode = "in")
})
all.equal(neigbours, neib2)
# [1] TRUE