Применить функцию к списку сетевых объектов с различными аргументами функции - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть список сетевых объектов igraph и функция, которую я хочу применить к каждой сети с различным набором аргументов функции для каждой сети.

Воспроизводимый пример:

# network
network <- graph(c("1","2","3","4"),directed = FALSE)

# making a list of graph objects
Converted <- list(network)
List <- rep(Converted,10)

# List with different parameters (Function arguments)
Xvalues <- 1:10

# function to add x nodes to the network
AddNode <- function(network,x){

        for (i in 1:x){

                network <- network + vertex(as.character(length(V(network)) + 1)) 

        }

        return(network)
}

Я хочу использовать функцию с i-м набором параметров в качестве аргументов функции для i-го элемента Списка сетей. Конечно, это работает с циклом for, но мне бы очень хотелось найти решение, использующее lapply, mapply, map или тому подобное, потому что это значительно упростило бы чтение и распараллеливание остальной части скрипта (функция в реальном скрипте намного более сложный и не включает цикл for).

Вот что я до сих пор безуспешно пробовал:

Lapply

ResultList <- lapply(List,AddNode,Xvalues)

Mapply

ResultList <- mapply(AddNode,List,Xvalues)

Карта

ResultList <- map(.x = List,.f=AddNode,x=Xvalues)

субоптимальное решение с использованием цикла for:

ResultList <- list(NA)
ResultList <- rep(ResultList,10)

for (i in Xvalues){

        ResultList[[i]] <- map(.x = List[i],.f=AddNode, x = Xvalues[i])

}

1 Ответ

0 голосов
/ 06 сентября 2018

Ваш Xvalues должен иметь ту же длину, что и ваш список, и вам нужен параметр SIMPLIFY=F в mapply:

Xvalues <- 1:10
ResultList <- mapply(AddNode,List,Xvalues, SIMPLIFY=F)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...