Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中使用多线程包_R_Multithreading - Fatal编程技术网

在R中使用多线程包

在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

我需要多线程运行我的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_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)