将函数应用于具有不同函数参数的网络对象列表
Apply function to a list of network objects with different function arguments
我有一个 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)
申请
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])
}
您的 Xvalues
需要与您的列表长度相同,并且您需要 mapply 中的 SIMPLIFY=F
参数:
Xvalues <- 1:10
ResultList <- mapply(AddNode,List,Xvalues, SIMPLIFY=F)
我有一个 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)
申请
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])
}
您的 Xvalues
需要与您的列表长度相同,并且您需要 mapply 中的 SIMPLIFY=F
参数:
Xvalues <- 1:10
ResultList <- mapply(AddNode,List,Xvalues, SIMPLIFY=F)