我正在使用Maxent进行一些空间分析。我有一个很长的脚本,有许多输出,我在列表中收集。它可以在rasterstack中使用for循环和低分辨率气候预测器(在我的核心i5,6gb笔记本中)。但我需要使用一组高分辨率的栅格,所有问题都来自这个问题。即使使用16核,32GB的虚拟机,处理速度也很慢,3天后,内存不存在,并且在我的循环(有92种)中大约50转之后运行关闭。我试图通过收集垃圾来清理内存和使用doParallel来改进这个脚本。在使用低分辨率预测器完全运行新脚本之后,我将使用高分辨率预测器进行尝试
因此,我将脚本更改为使用/**
* Get a single column's value from the first result of a query.
*
* @param string $column
* @return mixed
*/
public function value($column)
而不是foreach
,并使用for
但到目前为止,我得到了这个结果:
%dopar%
我看到了关于同一问题的另一个问题,但是这个人需要的非常简单的解决方案并不适用于我..所以,非常欢迎任何提示
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
[[4]]
NULL
答案 0 :(得分:3)
您可以拨打foreach
来指定"收集器"变量如:
results <- foreach(i=1:4, .packages=c("dismo","scales","rgdal","rgeos","rJava")) %dopar%
然后,在foreach循环结束之前,您可以在公共列表中收集所有结果变量并返回它们:
out <- list(xm_spc_list= xm_spc_list,
e_spc_list = e_spc_list,
px_spc_list = px_spc_list,
... = ...,
... = ....)
return(out)
}
请注意,在foreach中,您可以避免使用xm_spc_list[[i]] <-
之类的结构,因为foreach将通过&#34;绑定&#34;来为您解决这个问题。结果列在(有序)列表中。
检索&#34;单身&#34;在foreach之后的results
列表列表中输出,然后你可以使用类似的东西:
xm_spc_list <- data.table::rbindlist(do.call(c,lapply(results, "[", 1)))
e_spc_list <- data.table::rbindlist(do.call(c,lapply(results, "[", 2)))
....
....
HTH(尽管手头的例子不可测试)