4

種分布モデリングの将来のシナリオのすべての生物気候変数を取得したいと思います。そこで、worldclim データベースの 3 つの変数を使用して「dismo」パッケージで「biovars」関数を実行し、12 層の RasterBrick を取得しました。

prec<-stack(paste(getwd(),"/prec_2080/wc_2_5m_HADCM3_B2a_2080_prec_",1:12,".bil",sep=""))
tmin<-stack(paste(getwd(),"/tmin_2080/wc_2_5m_HADCM3_B2a_2080_tmin_",1:12,".bil",sep=""))
tmax<-stack(paste(getwd(),"/tmax_2080/wc_2_5m_HADCM3_B2a_2080_tmax_",1:12,".bil",sep=""))
x<-biovars(prec=prec,tmin=tmin,tmax=tmax)
 x
class       : RasterBrick 
dimensions  : 3600, 8640, 12  (nrow, ncol, nlayers)
resolution  : 0.04166667, 0.04166667  (x, y)
extent      : -180, 180, -60, 90  (xmin, xmax, ymin, ymax)
projection  : NA 
values      : C:/DOCUME~1/Marco/LOCALS~1/TMP/R_raster_tmp/raster_tmp_8984740455.grd 
min values  :     42 -65458  -1017      0     71      0 -65439     22     23     56 ... 
max values  :  65456    213      1  34159  65534  65513  65534  65507  65503  65518 ... 

ただし、19 個の bioclim 変数が必要であると考えました。あなたが言ったように、そこ以外の生物型にはもっと多くの議論がありますが、私はそれらが何であるかわかりません. 手伝ってくれませんか?

これのもう 1 つの問題は、これらの変数の書き込みでエラーが発生したことです。

writeRaster(x,paste(getwd(),"/wc_2_5m_HADCM3_B2a_2080_1.grd",sep=""))

dim(res) のエラー <- c(ncols, raster@data@nlayers * nrows) : dims [製品 933120] がオブジェクトの長さと一致しません [889920]

そして、それらをバンドごとに書き込もうとすると、次のエラーが発生しました。

for (i in 10:12) {
writeRaster(x[[i]],paste(getwd(),"/wc_2_5m_HADCM3_B2a_2080_",i,".grd",sep=""),overwrite=TRUE)
}

result[, i] のエラー <- readBin(raster@file@con, what = dtype, n = ncols, : 置換の長さはゼロ

3 つの入力変数の次元は同じです。たとえば、次のようになります。

prec
class       : RasterStack 
dimensions  : 3600, 8640, 12  (nrow, ncol, nlayers)
resolution  : 0.04166667, 0.04166667  (x, y)
extent      : -180, 180, -60, 90  (xmin, xmax, ymin, ymax)
projection  : NA 
min values  : 0 0 0 0 0 0 0 0 0 0 ... 
max values  : 65535 65535 65535 65535 65535 65535 65535 65535 65535 65535 ... 

誰でも理由を説明できますか?よろしくお願いします〜

4

2 に答える 2

4

これは確かにバグです。これはバージョン0.5-19で修正されており、R-Forgeから24時間以内に、CRANからすぐに利用できるようになります。RH

于 2011-02-26T05:50:53.743 に答える
2

過去にこの機能で同じ問題を発見したので、もう少し詳しく調べてみました。のヘルプ ページにbiovarsは、ベクトル、行列、または rasterStack/Bricks の 3 つの引数を受け入れると記載されています。これら 3 つのケースでは、引数はそれぞれ 12 か月の長さ、幅、または深さを持つ必要があり、戻り値は 19 の長さ、幅、または深さになります。

3 つのベクトル引数のヘルプ ページの例では、19 個の値のベクトルが返されます。これはうまくいきます。

tmin.V <- c(10,12,14,16,18,20,22,21,19,17,15,12)
tmax.V <- tmin.V + 5
prec.V <- c(0,2,10,30,80,160,80,20,40,60,20,0)
biovars(prec.V, tmin.V, tmax.V)

3 つの 2x12 行列を含む例では、2x19 行列が返されますが、これも正常に機能します。

tmin.M <- rbind(tmin.V, tmin.V+1)
tmax.M <- rbind(tmax.V, tmax.V+1)
prec.M <- rbind(prec.V, prec.V+1)
biovars(prec.M, tmin.M, tmax.M)

しかし、rasterstacks と rasterbricks を使用すると、19 個の値が得られません。これはバグだと思います。worldclim.orgbiovarsから実際の *.bil データを実行し、12 値の回答の結果を複製しました。エラーを返す以下のダミー コードを使用しようとしましたが (理由は不明)、問題を R. Hijmans に詳細に説明したい場合に役立つ場合があります。トリミングされた worldclim *.bil データを使用して biovars を呼び出すと、同じエラーが発生します。

dup12 <- function(clim.M) {
  raslist = list()
  for(i in 1:12) raslist = c(raslist, raster(clim.M))
  do.call(stack, raslist)
}
tmin.S <- dup12(tmin.M)
tmax.S <- dup12(tmax.M)
prec.S <- dup12(prec.M)
biovars(prec.S, tmin.S, tmax.S)

Error in v[tr$row[i]:(tr$row[i] + tr$nrows[i] - 1), ] <- p : 
  number of items to replace is not a multiple of replacement length
于 2011-02-26T01:33:09.847 に答える