2016-10-03 85 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()。我做了相應的編輯。 –

相關問題