首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用dismo包创建生物气候变量的问题

使用dismo包创建生物气候变量的问题
EN

Stack Overflow用户
提问于 2011-02-25 11:03:50
回答 2查看 2.9K关注 0票数 4

我想得到所有的生物气候变量,未来的情况下,为物种分布模拟。因此,我使用worldclim数据库中的三个变量在"dismo“包中运行"biovars”函数,并得到了一个由12层组成的RasterBrick:

代码语言:javascript
复制
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个生物变量。正如你提到的,除了生物,还有更多的争论,但我不知道它们是什么。我可以请您帮个忙吗?

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

代码语言:javascript
复制
writeRaster(x,paste(getwd(),"/wc_2_5m_HADCM3_B2a_2080_1.grd",sep=""))

dim(res) <- c(ncols,raster@data@nlay*nrow)中的

错误: dims产品933120与对象889920的长度不匹配

而且,当我试着一条一条地写它们时,我得到了以下错误:

代码语言:javascript
复制
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,:替换长度为零)

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

代码语言:javascript
复制
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 ... 

有人能解释原因吗?提前感谢~

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-26 05:50:53

这确实是个错误。它已经固定在0.5-19版本,它应该可以在24小时内从R-Forge和从CRAN很快。RH

票数 4
EN

Stack Overflow用户

发布于 2011-02-26 01:33:09

在过去,我发现这个函数也有同样的问题,所以现在我看得更深了一些。biovars的帮助页面声明它将接受三个参数,即向量、矩阵或栅格堆栈/砖块。对于这三种情况,参数的长度、宽度或深度分别为12个月,而返回值的长度、宽度或深度为19。

3个向量参数的帮助页示例返回19个值的向量。这个很好用。

代码语言:javascript
复制
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矩阵,也可以很好地工作。

代码语言:javascript
复制
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)

但是有了栅格堆和栅格砖,你就得不到19个值。我相信这是个窃听器。我对来自biovars的真实*.bil数据运行了worldclim.org,并复制了12值答案的结果。我尝试使用下面的虚拟代码来返回一个错误(不清楚原因),但是如果您想详细地向R.Hijmann解释您的问题,可能会很有用。当我使用已裁剪的worldclim *.bil数据调用biovars时,也会遇到同样的错误。

代码语言:javascript
复制
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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5116448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档