Hi Jacob, Thanks for the suggestion. So... func <- function(X) {x <- movingFun(c(X), n=3, sum, 'from', circular=TRUE);return(x)} mon_stac <- stack(paste(pc_clim,"",y,"_prec",1:12,".asc", sep="")) # then wetness_quarters <- calc(mon_stac, func) Error in .local(x, fun, ...) : function 'fun' returns more than one value
# This make sense that this would do this.. # Now this to get the first month of the max quarter by returning first month number: func <- function(X) {x <- which.max(movingFun(c(X), n=3, sum, 'from', circular=TRUE));return(x)} # Then wetness_quarters <- calc(mon_stac, func) Error in v[, tr$row[i]:(tr$row[i] + tr$nrows[i] - 1)] <- matrix(sv, nrow = ncol(outraster)) : incorrect number of subscripts on matrix # This error being returned after a long time busying a quadcore computer... Even if I can get your suggestion to work, I am still faced with the problem of retrieving the sum of values of the quarter marked my the month number, which should look something like this: quart_value <- function(a,b,d,e,f,g,i,j,k,l,m,n,o){ ifelse(o==1, X <- mean(c(a,b,d)), ifelse(o==2, X <- mean(c(b,d,e)), ifelse(o==3, X <- mean(c(d,e,f)), ifelse(o==4, X <- mean(c(e,f,g)), ifelse(o==5, X <- mean(c(f,g,i)), ifelse(o==6, X <- mean(c(g,i,j)), ifelse(o==7, X <- mean(c(i,j,k)), ifelse(o==8, X <- mean(c(j,k,l)), ifelse(o==9, X <- mean(c(k,l,m)), ifelse(o==10, X <- mean(c(l,m,n)), ifelse(o==11, X <- mean(c(m,n,a)), ifelse(o==12, X <- mean(c(n,a,b)),NA)))))))))))) return(X)} #For BIO8 mon_stac.wq <- stack(paste(pc_clim,"",y,"_tmean",1:12,".asc", sep=""), wetness_quarters) tmean.wq <- overlay(mon_stac.wq, fun=quart_value) With "o" being the product of the "func"or "maxmonth" function I think that I NEED to get the "overlay" function to work, but am of course open to suggestions. I appreciate the help. Regards, Brian On 11/8/2010 10:59 AM, Jacob van Etten wrote: > I don“t know what the problem is with overlay(), but you could use an > alternative approach, using calc() instead. > > Something like this (not tried) > > library(raster) > library(dismo) > func <- function(x, ...) movingFun(x, n=3, sum, circular=TRUE) > wetness_quarters <- calc(mon_stac, func) > wettest_quarter <- calc(wetness_quarters, function(x) which(x == max(x)) > > The output input should indicate the month in the centre of the > wettest quarter. > > Jacob. > > --- On *Mon, 8/11/10, Brian Oney /<zenli...@gmail.com>/* wrote: > > > From: Brian Oney <zenli...@gmail.com> > Subject: [R-sig-Geo] Bioclimatic variables - wettest quarter > To: r-sig-geo@stat.math.ethz.ch > Date: Monday, 8 November, 2010, 1:40 > > Hello All, > > I am attempting to reproduce the bioclimatic (Worldclim, Hijmans et al > 2005) variables with the raster package and I am stuck on the group > "temp of driest quarter" etc. variables. > I am attempting it with the function "overlay" ("raster" package). > > Here is how it looks: > # To know the first month of the wettest quarter > maxmonth<- function(a,b,d,e,f,g,i,j,k,l,m,n){ > o<- sum(c(a,b,d)) > p<- sum(c(b,d,e)) > r<- sum(c(d,e,f)) > u<- sum(c(e,f,g)) > v<- sum(c(f,g,i)) > w<- sum(c(g,i,j)) > x<- sum(c(i,j,k)) > y<- sum(c(j,k,l)) > z<- sum(c(k,l,m)) > aa<- sum(c(l,m,n)) > ab<- sum(c(m,n,a)) > ac<- sum(c(n,a,b)) > ad<- which.max(c(o,p,r,u,v,w,x,y,z,aa,ab,ac)) > return(ad)} > > > maxmonth(a=13,b=16,d=41,e=61,f=41,g=16,i=15,j=14,k=13,l=11,m=31,n=11) > # works: 2nd element (month) is the beginning of the wettest quarter > [1] 2 > mon_stac<- stack(paste(pc_clim,"",y,"_prec",1:12,".asc", sep="")) > # Now attempt it > avg<- overlay(mon_stac, fun=maxmonth) > Error in .overlayList(rasters, fun = fun, filename = filename, ...) : > cannot use this formula; lenghts do not match > > # How about manually? > a<- raster(paste(pc_clim,"",y,"_prec",1,".asc", sep="")) > b<- raster(paste(pc_clim,"",y,"_prec",2,".asc", sep="")) > d<- raster(paste(pc_clim,"",y,"_prec",3,".asc", sep="")) > e<- raster(paste(pc_clim,"",y,"_prec",4,".asc", sep="")) > f<- raster(paste(pc_clim,"",y,"_prec",5,".asc", sep="")) > g<- raster(paste(pc_clim,"",y,"_prec",6,".asc", sep="")) > i<- raster(paste(pc_clim,"",y,"_prec",7,".asc", sep="")) > j<- raster(paste(pc_clim,"",y,"_prec",8,".asc", sep="")) > k<- raster(paste(pc_clim,"",y,"_prec",9,".asc", sep="")) > l<- raster(paste(pc_clim,"",y,"_prec",10,".asc", sep="")) > m<- raster(paste(pc_clim,"",y,"_prec",11,".asc", sep="")) > n<- raster(paste(pc_clim,"",y,"_prec",12,".asc", sep="")) > > avg<- overlay(a,b,d,e,f,g,i,j,k,l,m,n, fun=maxmonth) > Error in .overlayList(rasters, fun = fun, filename = filename, > datatype > = datatype, : > cannot use this formula; lenghts do not match > > Also doesn't work... > > length(mon_stac[1]) > [1] 12 > I have 12 rasters being fed into overlay, but it won't buy it. > I think that my first step is to know the first month of the wettest > month. Once I can do that I can do it for temperature as well. > > Thanks and Regards, > Brian > > _______________________________________________ > R-sig-Geo mailing list > R-sig-Geo@stat.math.ethz.ch > </mc/compose?to=r-sig-...@stat.math.ethz.ch> > https://stat.ethz.ch/mailman/listinfo/r-sig-geo > > [[alternative HTML version deleted]]
_______________________________________________ R-sig-Geo mailing list R-sig-Geo@stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo