在R中使用多线程包
我需要多线程运行我的R应用程序,因为它需要5分钟的时间运行,并且只使用了计算机可用CPU的15% 运行一段时间的过程的一个示例是计算包含n层的非常大的光栅堆栈的平均值:在R中使用多线程包,r,multithreading,R,Multithreading,我需要多线程运行我的R应用程序,因为它需要5分钟的时间运行,并且只使用了计算机可用CPU的15% 运行一段时间的过程的一个示例是计算包含n层的非常大的光栅堆栈的平均值: mean = cellStats(raster_layers[[n]], stat='sd', na.rm=TRUE) 使用并行库,我可以创建一个新集群并向其传递一个函数: cl <- makeCluster(8, type = "SOCK") parLapply(cl, raster_layers[[1]], mean
mean = cellStats(raster_layers[[n]], stat='sd', na.rm=TRUE)
使用并行库,我可以创建一个新集群并向其传递一个函数:
cl <- makeCluster(8, type = "SOCK")
parLapply(cl, raster_layers[[1]], mean_function)
stopCluster(cl)
cl解决方案来自Ben Barnes,谢谢
以下代码可以正常工作:
mean_function <- function(variable)
{
result = cellStats(variable, stat='mean', na.rm=TRUE)
return(result)
}
cl <- makeCluster(procs, type = "SOCK")
clusterEvalQ(cl, library(raster))
result = parLapply(cl, a_list, mean_function)
stopCluster(cl)
mean_函数export
可能吗?这是一个非常有用的建议谢谢,我将尝试使用一个包可能使用名称空间,即raster::cellStats
?clusterEvalQ
建议使用clusterEvalQ(cl,library(raster))
在集群节点上加载包。我试图重现您的示例,但有些变量我无法访问。例如,带数和列表是多少?具体地说,我想使用更多的核心来运行cellStats命令:库(光栅)#生成一些数据cmip我对我的答案进行了一点编辑,以使这个答案更直观。谢谢编辑。在我的例子中,我使用的不是光栅,而是光栅砖(具有多个图层的光栅)。你的代码还能用在我身上吗?我的尝试没有取得任何成功。是的,我想是的,用光栅砖的每一层填充a_列表,确保您的procs值与您放入列表的层数相同。
mean_function <- function(variable)
{
result = cellStats(variable, stat='mean', na.rm=TRUE)
return(result)
}
cl <- makeCluster(procs, type = "SOCK")
clusterEvalQ(cl, library(raster))
result = parLapply(cl, a_list, mean_function)
stopCluster(cl)