Also ?tapply But if you are a beginner who has done no homework -- i.e. you have made no effort to learn basics with The Intro to R tutorial or other online tutorial -- then you probably won't be able figure it out. We expect some minimal effort by posters. If you have done such homework, then it may be an alternative for you.
-- Bert On Sun, May 19, 2013 at 9:06 AM, David Winsemius <dwinsem...@comcast.net> wrote: > > 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. -- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm ______________________________________________ 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.