4

我想获得物种分布建模未来情景的所有生物气候变量。因此,我使用 worldclim 数据库中的三个变量在“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 变量。正如您所提到的,除了那里之外,biovars 中还有更多参数,但我不知道它们是什么。你能帮帮我吗?

另一个问题是我在编写这些变量时出错:

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)
}

结果错误 [, i] <- readBin(raster@file@con, what = dtype, n = ncols, : 替换长度为零

三个输入变量具有相同的维度,例如:

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 版本中得到修复,应该会在 24 小时内从 R-Forge 获得,并且很快会从 CRAN 获得。相对湿度

于 2011-02-26T05:50:53.743 回答
2

过去我发现这个函数有同样的问题,所以现在我看的更深了。帮助页面biovars声明它将接受三个参数,即向量、矩阵或 rasterStack/Bricks。对于这三种情况,参数的长度、宽度或深度应分别为 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)

具有三个 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 个值。我相信这是一个错误。我运行biovars了来自 worldclim.org 的真实 *.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 回答