gpt4 book ai didi

r - 在 R 中使用多线程包

转载 作者:行者123 更新时间:2023-12-04 20:01:00 25 4
gpt4 key购买 nike

我需要多线程我的 R 应用程序,因为它需要 5 分钟才能运行,并且只使用了 15% 的计算机可用 CPU。

运行需要一段时间的过程的一个示例是计算包含 的非常大的栅格堆栈的平均值。 层:

mean = cellStats(raster_layers[[n]], stat='sd', na.rm=TRUE)

使用 平行库,我可以创建一个新集群并将函数传递给它:
cl <- makeCluster(8, type = "SOCK")
parLapply(cl, raster_layers[[1]], mean_function)
stopCluster(cl)

其中均值函数是:
mean_function <- function(raster_object)
{
result = cellStats(raster_object, stat='mean', na.rm=TRUE)
return(result)
}

这种方法工作正常,只是它看不到使用 所需的 'raster' 包。 cellStats .所以它没有说 没有功能细胞统计。 我试过在函数中包含库,但这没有帮助。

raster 包带有一个cluster 函数,它可以看到函数cellStats,但是据我所知,cluster 函数必须返回一个 光栅对象并且必须通过 单个光栅对象 这对我来说不够灵活,我需要能够传递一个对象列表并返回一个数字变量......我可以使用 平行库,只要它可以看到光栅包函数。

那么,有人知道如何将包传递给 R 中的多线程节点吗?或者,我如何才能从栅格集群函数中返回单个值?

最佳答案

解决方案来自 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)

哪里 过程 是您希望使用的处理器数量,它必须与您传递的列表长度相同(在本例中称为 a_list )。

a_list 在这种情况下,需要是一个包含栅格的列表,可以对其进行操作以使用 cellStats 函数计算平均值。所以, a_list 只是一个栅格列表,包含 过程 栅格数。

关于r - 在 R 中使用多线程包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29604977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com