R 在llply()中嵌入llply()以匹配列表中的对象的最佳替代方案?

R 在llply()中嵌入llply()以匹配列表中的对象的最佳替代方案?,r,list,optimization,plyr,R,List,Optimization,Plyr,我正在R中编写一个路径查找程序,它查找从一个节点列表(表示为节点对象)到另一个节点列表(表示为节点对象)的所有路径(在n距离处)。为了加快路径发现,我在两个方向构建路径。然后,作为最后一步,我检查节点是否相交 简言之,我在一个节点列表和另一个节点列表之间运行,查找所有匹配项。代码可以工作,但是运行速度非常慢。有人对我如何重新编写这段代码以实现更好的优化有什么建议吗 unlist(llply(list.nodepath.1, # For each node.1 in li

我正在R中编写一个路径查找程序,它查找从一个节点列表(表示为节点对象)到另一个节点列表(表示为节点对象)的所有路径(在n距离处)。为了加快路径发现,我在两个方向构建路径。然后,作为最后一步,我检查节点是否相交

简言之,我在一个节点列表和另一个节点列表之间运行,查找所有匹配项。代码可以工作,但是运行速度非常慢。有人对我如何重新编写这段代码以实现更好的优化有什么建议吗

unlist(llply(list.nodepath.1,
             # For each node.1 in list.nodepath.1...
             function(node.1){
               llply(list.nodepath.2,
                     # And for each node.2 in list.nodepath.2...
                     function(node.2){
                       if(node.1@internode == node.2@internode){
                         cat("Connection found!...\n")
                         # Merge node objects, including meta-data (defined elsewhere)
                         intersect(node.1, node.2)
                       }
                     })
              })
        )
我尝试过并行化;但是,我似乎无法让llply(.parallel=TRUE)使用此函数

根据Rprof()性能分析,瓶颈似乎与llply()调用有关,而不是intersect()函数

我非常感谢您对重组此代码的任何建议。

您看过该软件包了吗?你的问题读起来像是这里解决的问题的变体;其使用示例如下:

> ## load library and read data
R> library("TSP")
R> data("USCA312")

R> ## create a TSP object from the data 
R> tsp <- TSP(USCA312)
R> tsp

object of class 'TSP'
312 cities (distance   'euclidean')

R> ## find a 2-optimal solution 
R> tour <- solve_TSP(tsp, method = "2-opt")
R> tour
##加载库并读取数据
R> 图书馆(“TSP”)
R> 数据(“USCA312”)
R> ##根据数据创建TSP对象
R> tsp
类“TSP”的对象
312个城市(距离‘欧几里得’)
R> ##找到2-最优解
R> 旅游

您可能会发现简单地使用lappy()比使用llply()更有效。比如说,

L1 <- as.list(letters)
L2 <- list("f", "h", "k", "m")

unlist(lapply(L1, function(l) {
  lapply(L2, function(m) {
    if (l == m) {
      print("match found")
      return(m)
    }
  })
}))
L1