我想学习如何使用apply
,sapply
或lapply
更有效地编码。虽然我了解它的基础知识,但我仍然缺乏直觉。具体来说,我想在图形对象上使用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")
}
答案 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