применить функцию к объекту igraph - PullRequest
0 голосов
/ 26 марта 2020

Я хотел бы узнать, как более эффективно кодировать, используя apply, sapply или lapply. Хотя я понимаю основы этого, мне все еще не хватает интуиции. В частности, я хотел бы использовать apply для графического объекта. Можно ли реализовать приведенный ниже пример с одной из этих функций и как это сделать? Любое более эффективное решение приветствуется, так как интересующий меня график имеет более 2 млн. узлы, каждый из которых имеет одно ребро.

# 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 Ответ

2 голосов
/ 26 марта 2020

lapply не обязательно более эффективен. Но вы можете повысить эффективность, сначала создав объект neigbours, вместо того, чтобы расширять его в каждой итерации for l oop, заставляя вызывать процедуры управления памятью 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...