2016-10-03 41 views
1

我正在寻找提高速度和降低以下行的内存使用的方式比较快的方式:总结基于R中的多边形程度栅格值

export <- raster(paste0(catch_dir,'/export_streams.rst')) 
    catchm_polyg <- readOGR(dsn = catch_dir, layer = 'catchment') 
    Model_10 <- extract(export, catchm_polyg, fun = sum, na.rm = TRUE) 

这给我的总和所有来自export_streams.rst的值,以catchm_polyg作为范围。

我想为不同的输入数据做很多次。因此,代码是function的一部分,然后在foreach循环中使用。这一切都在一定程度上正常工作。虽然代码不适用于较大的输入数据,因为我显然没有足够的内存(32GB,64位R版本)。计算时间也非常长。有关如何改进代码的任何建议?

回答

1

几件事情要加快东西可能包括以下一些:

  1. 问自己:我可以先aggregate我的光栅使用和功能的骏马分辨率?
  2. 内存:使用光栅包中的函数时,不要始终写入内存。请尝试在可能的情况下进行外部写入,否则会出现内存错误。

  3. 如果您有多部分多边形(SpatialPolygonDataframe对象)。只需运行一次提取函数,然后取消选择然后运行函数。

    # quickly summarise across multiple polygons 
    allmyvals <- extract(myrast, myploys) 
    myploys$sum_in_poly <- unlist(lapply(allmyvals , function(x) if (!is.null(x)) sum(x, na.rm=TRUE) else NA)) 
    
  4. 采取另一种方法出了光栅包或尝试一些GetValues方法。见这些线程:

+0

感谢您的回答。 '提取(myrast,myploys,fun = sum,na.rm = TRUE,文件名=“myfile.rst”,overwrite = TRUE)'这给了我作为数字的总和。但是,如果我现在想要使用这个号码(例如转换为其他单位),我该如何“抓住”这个号码?因为代码显然不写一个名为“myfile.rst”的文件。我也可以写'extract(myrast,myploys,fun = sum,na.rm = TRUE,overwrite = TRUE)''。我不明白代码实际上在哪里“写入文件”。 – nowi

+0

O对不起。你是正确的写外部不会使用extract()。我做了相应的编辑。 –

相关问题