現在のrコードは、worldlcimから気候データを抽出するのに長い時間がかかります。これを高速化する方法

Tiny_hopper

現在、私のコードは[worldclim] [1]データセットから気候変数を抽出するのに時間がかかりすぎています。リンクから気候データをダウンロードして、種の分布ポリゴンの最高気温を見つけ、CSVファイルとしてディレクトリに保存したいと思います。

コードは機能していますが、時間がかかりすぎます(たとえば、私のPCでは3〜4日)。誰かが私のコードのパフォーマンスを改善する方法を提案できますか?

私のコードはここにあります:

# download the climate dataset and unzip. I can download and unzip this into my pc. Please suggest me on main codes for improvement
download.file("http://biogeo.ucdavis.edu/data/climate/cmip5/30s/mi85tx50.zip", destfile = "E://ClimateDataOutputs//MIROC-ESM-CHEM_rcp85TX", mode="wb")
unzip("E://ClimateDataOutputs//MIROC-ESM-CHEM_rcp85TX")
# Codes for improvement
# load required packages
require(sp)
require(rgdal)
require(raster)
require(lsr)
require(maptools)
# For Bioclim - Need to project species polygons
projection <- CRS ("+proj=longlat +ellps=WGS84 +towgs84=0,0,0,0,0,0,0 +no_defs")
polygons <- readShapePoly("F:\\9. Other projects\\All projected maps\\AllP.shp", proj4string = projection)
polygons$BINOMIAL <- as.character(polygons$BINOMIAL)
names=c(polygons$BINOMIAL)
stats_out<- data.frame(matrix(NA, ncol = 4, nrow = 579))
colnames(stats_out)<-c("BINOMIAL", "AAD", "mean", "obs")
stats_out[,1]<-names
# iterate over species polygons


for (i in 1:579) {
    poly<-polygons[i,]
    print(poly$BINOMIAL)
    data_out<-data.frame(matrix(NA, ncol = 1))
    colnames(data_out)<-c("MaxTemp2050rcp85_MIROC_ESM_CHEM")` 



    for (j in 1:12) {
        filename<-c(paste("E:\\ClimateDataOutputs\\mi85tx50",j,".tif", sep=""))
        ##print(filename)
        grid<-raster(filename)
        ##plot(grid)
        ##plot(poly, add=TRUE)
        data<-extract(grid, poly)
        data1<-as.data.frame(data)
        colnames(data1)<-c("MaxTemp2050rcp85_MIROC_ESM_CHEM")
        data_out= rbind(data_out,data1)
        }



    M<-mean(data_out$MaxTemp2050rcp85_MIROC_ESM_CHEM, na.rm=TRUE)
    AAD<-aad(data_out$MaxTemp2050rcp85_MIROC_ESM_CHEM, na.rm=TRUE)
    stats_out$AAD[i]<-AAD
    stats_out$mean[i]<-M
    stats_out$obs[i]<-nrow(data_out)
  }


print(stats_out)
write.csv(stats_out, "E://ClimateDataOutputs//MaxTemp2050rcp85_MIROC_ESM_CHEM_AAD.csv")
バスティアン

ラスターを積み上げてみませんか?

stack(list.files("E:\\ClimateDataOutputs","mi85tx50",full.names=T))
data<-extract(grid, poly)

それは役立つかもしれません

他のオプション、行:

data_out= rbind(data_out,data1)

非常に非効率的です。ループ内では、最初にオブジェクトを準備して、次のように埋める方が常に適切です。data_out[j,] <- data1

最後に、少し難しいですが、「j」ループを関数にして、parLapplyすべてのポリゴンで分析を並列化する方法を見つけてください。

また、この種の質問system.timeでは、ボトルネックがどこにあるかをより正確に把握できるようにステートメントを追加することをお勧めします。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ