On May 19, 2013, at 4:20 AM, Jess Baker wrote: > Dear list, > > I am very new to R and have been struggling with extracting data from a > netcdf file. Basically I have read in a file containing vegetation height > data organised in 0.5 degree grid cells spanning the whole globe. Each cell > contains a histogram representing the height distribution and I need to > extract a single value (the mean) from each cell. My data has 720 rows and > 240 columns so is pretty large and I’ve been told for loops should be the > most straightforward way to do this. Sorry the code below is not reproducible > but hopefully it illustrates where I am going wrong. > > ##The following returns the mean value of a single cell (260,90) > >> sum(ht.center.vals*(ht.hist[260,90,]))/sum(ht.hist[260,90,]) > > ##but when I try to translate this to a for loop I get NaN > >> mean.height<-NULL >> for(i in 1:nrow(ht.hist)){ > + for(j in 1:ncol(ht.hist)){ > + mean.height<-sum(ht.center.vals*(ht.hist[i,j,]))/sum(ht.hist[i,j,]) > + } > + } >> mean.height > [1] NaN
You appear to be committing a common programming mistake. Assignment on the LHS to a non-indexed variable will overwrite all of the previous values. The NaN is now simply the last value calculated. > Can anyone tell me how I tell R to look at each cell in turn, extract the > mean value and save it in a new array? Clearly I am not doing it correctly! I would imagine making mean.height be an matrix/array of the desired dimensions and then assign to the proper values inside that object using the loop indices. mean.height <- matrix(NA, nrow(ht.hist), ncol(ht.hist) ) # then the loop would do the assignment: mean.height[,i,j] <- … -- David Winsemius Alameda, CA, USA ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.