代码之家  ›  专栏  ›  技术社区  ›  Ju Ko

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

  •  1
  • Ju Ko  · 技术社区  · 6 年前

    我有一个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循环,但是我真的很想找到一个使用lappy、mappy、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 回复  |  直到 6 年前
        1
  •  1
  •   thc    6 年前

    你的 Xvalues 需要和你的列表一样长,而且你需要 SIMPLIFY=F mapply中的参数:

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