2011-02-25 2 views
3

종 분포 모델링에 대한 향후 시나리오의 모든 생물권 변수를 얻고 싶습니다. 그래서 worldclim 데이터베이스에서 세 가지 변수를 사용하여 "dismo"패키지에서 "biovars"기능을 실행하고 나는 12 층의 RasterBrick을 가지고 :Dismo 패키지를 사용하여 생물권 변수를 생성하는 데 문제가 있습니다.

>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 변수가 있어야한다 생각했다. 당신이 거기서 언급 한 것 외에는 바이오 바에 더 많은 논쟁이 있지만, 나는 그들이 무엇인지 모른다. 너 좀 도와 줄 수있어?

이의 또 다른 문제는 내가 오류 작성이 변수를 가지고 있다는 것입니다 :

>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([email protected]@con, what = dtype, n = ncols, : 
    replacement has length zero 

:

>writeRaster(x,paste(getwd(),"/wc_2_5m_HADCM3_B2a_2080_1.grd",sep="")) 
Error in dim(res) <- c(ncols, [email protected]@nlayers * nrows) : 
    dims [product 933120] do not match the length of object [889920] 

하고, 내가 밴드 그들에게 밴드를 작성했는데, 나는 다음과 같은 오류가 발생했습니다 세 개의 입력 변수는 같은 치수입니다. 예 :

> 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

이것은 R-sig-ecology 목록에 게시하는 것이 더 좋을 수도 있습니다. 이것은 프로그래밍 Q가 아니며 R. https://stat.ethz.ch/mailman의 꽤 틈새 영역이기 때문입니다./listinfo/r-sig-ecology –

+0

제안 해 주셔서 감사합니다! 사실, 나는 Hijmans 교수에게 이미 게시했지만 여전히 지금은 대답이 없습니다. 아마 그는 꽤 바빠서, 나는 더 많은 시간을 기다릴 것이다. – Marco

답변

4

이것은 실제로 버그입니다. R-Forge에서 24 시간 내에 CRAN에서 사용할 수 있도록 0.5-19 버전으로 수정되었습니다. RH

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) 

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) 

하지만 래스터 스택과 래스터 브릭을 사용하면 19 가지 값을 얻을 수 없습니다. 나는 이것이 버그라고 생각한다. worldclim.org의 실제 * .bil 데이터에 biovars을 실행하고 12 개 값의 결과를 복제했습니다. 오류를 반환하는 아래의 더미 코드를 사용하려고했으나 문제를 Rijmans에게 자세히 설명하고 싶다면 유용 할 수 있습니다. 나는 또한 자른 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 
+0

위의 Hijmans 교수가 지적했듯이, 그것은 정말로 버그이며, 24 시간 내에 최신 버전의 디스 모아로 수정되어야합니다. 도우미 분석을 해준 J. Winchester에게 감사드립니다. – Marco

+0

@Marco : 새 버전을 사용해도 여전히 문제가 하나 있는데 다른 디스 모 사용자와 논의하고 싶습니다. 내 프로필에있는 이메일을 통해 저에게 연락하십시오. –

+0

매우 늦은 답변에 대해 죄송합니다 ~ Hijmans 교수님은 이미 최신 버전의 dismo에서 버그를 수정 했으므로 패키지를 업데이트하십시오. 건배 ~ – Marco

관련 문제