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