我想获得未来物种分布建模方案的所有生物气候变量。所以我使用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=""))
Error in dim(res) <- c(ncols, raster@data@nlayers * nrows) :
dims [product 933120] do not match the length of object [889920]
并且,当我尝试逐个编写它们时,我收到以下错误:
>for (i in 10:12) {
>writeRaster(x[[i]],paste(getwd(),"/wc_2_5m_HADCM3_B2a_2080_",i,".grd",sep=""),overwrite=TRUE)
}
Error in result[, i] <- readBin(raster@file@con, what = dtype, n = ncols, :
replacement has length zero
三个输入变量具有相同的尺寸,例如:
> 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 ...
有人可以解释原因吗?提前谢谢〜
答案 0 :(得分:4)
这确实是一个错误。它已在0.5-19版本中修复,应该可以在24小时内从R-Forge获得,并且很快就可以从CRAN获得。 RH
答案 1 :(得分: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个值。我相信这是一个错误。我在worldclim.org的真实* .bil数据上运行了biovars
,并复制了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