Это решение создает графики из матриц внутри списков. Может быть, вы могли бы избежать петли. Я приведу пример кода с использованием lapply()
и цикла ниже.
Обратите внимание, что в вашем цикле есть два счетчика: i
и count_1
. Для примера выше вам не нужны оба, а только:
for (i in 1:57) {
storage2[[i]] <- graph.incidence(storage1[[i]], mode = c("all"))
}
Полный пример кода был бы полезен, но я думаю, что вы должны убедиться, что storage1
действительно содержит нормальные матрицы.
Если вам нужен цикл, ваш подход со счетчиком заслуживает высокой оценки. Если бы вы добавили к списку внутри цикла, storage2 <- c(storage2, graph.incidence(...)
будет менее чистым и потенциально намного медленнее, поскольку c()
копирует весь список на каждой итерации, что приводит к экспоненциально более длительному времени выполнения.
Надеюсь, этот код поможет вам двигаться вперед.
# Some setup
library(igraph)
dimensions <- 10
networks <- 5
# Example data of a list of random matreces:
storage1 <- lapply(1:networks, function(x) m <- matrix(sample(c(0,1), dimensions^2, replace=T), nrow=dimensions))
# lapply()-solution: Make networks from each list-item in storage1
storage2 <- lapply(storage1, 'graph.incidence')
# forloop-solution: Since you specifically want to do it in a for-loop, this is one way to achieve that
storage3 <- list()
for(m in storage1){
storage3[[length(storage3) + 1]] <- graph.incidence(m)
}
# A quick test to see that the lapply-solution in storage2 is the same
# as the loop-solution in storage3
lapply(1:length(storage2), function(x) E(storage2[[x]]) == E(storage3[[x]]) )