将函数应用于具有不同函数参数的网络对象列表

时间:2018-09-06 16:32:07

标签: r igraph lapply mapply

我有一个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个参数集的函数作为网络列表第ith个元素上的函数参数。当然,这可以使用for循环,但是我真的很想使用lapply,mapply,map等找到解决方案,因为这会使脚本的其余部分更易于阅读和并行化(实际脚本中的功能是更加复杂,并且不涉及for循环。

这是到目前为止我没有成功尝试过的事情:

好动

ResultList <- lapply(List,AddNode,Xvalues)

应用

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 :(得分:1)

您的Xvalues的长度必须与列表相同,并且您需要在mapply中使用SIMPLIFY=F参数:

Xvalues <- 1:10
ResultList <- mapply(AddNode,List,Xvalues, SIMPLIFY=F)