
Dear Dennins,

Many thanks for you reply. Sorry for the convoluted loops, but I am starting to learn some programming and the loops are a bit complicated for me. Finally, a collegue help me with the code, and one code that works is like follow:

Pma<-rep (1:40)
P<-seq(1,4, 1)
Plot<-rep(P,10)
dbh2<-rnorm(40, mean=200, sd=5)
SBA2<-rnorm(40, mean=10, sd=1)

BAL2<-rep(0,length(Pma))

data<-data.frame(Pma,Plot,dbh2,SBA2,BAL2)

for (p in 1:length(unique(Plot))){ 
    index.stand<-which(data$Plot==p)  
    data.aux<-data[ index.stand , ] 
    result.aux<-numeric() 
    for (i in 1:length(data.aux$Pma)){
        result.aux[i] <-sum(data.aux$SBA2[which(data.aux$dbh2> data.aux[i , ]$dbh2)]) }
        data$BAL2[ index.stand]<-result.aux 
        rm(data.aux)
        rm(result.aux) 
        }
data

Best,

Paloma

> Date: Thu, 21 Jul 2011 14:18:37 -0700
> Subject: Re: [R] nested loop for
> From: djmuser@gmail.com
> To: paloma_rb2@hotmail.com
> CC: r-help@r-project.org
> 
> Hi:
> 
> I *think* this is what you're after, but I get dizzy trying to read
> convoluted loops. Try this instead;
> 
> # Function to find the total SBA2 for all dbh2 larger than the given one:
> foo <- function(d) {
>     d <- d[order(d$dbh2), ]
>     d <- transform(d, BAL2 = sum(SBA2) - cumsum(SBA2))
>     d
>   }
> 
> library('plyr')
> ddply(kk, .(Plot), foo)
>    Pma Plot     dbh2      SBA2      BAL2
> 1   29    1 185.8568  9.055821 91.530165
> 2   33    1 186.4623 10.762347 80.767818
> 3    1    1 192.8324 10.741988 70.025830
> 4   17    1 196.2093  9.484601 60.541229
> 5   21    1 204.0971 11.389817 49.151412
> 6   13    1 204.5070  9.644655 39.506756
> 7    9    1 205.3079 11.014892 28.491864
> 8   25    1 206.5908 10.041878 18.449986
> 9    5    1 206.8110  8.602678  9.847307
> 10  37    1 211.1735  9.847307  0.000000
> ...
> 
> # If you want the groupwise sum in the output, use the following
> version instead:
> foo <- function(d) {
>     d <- d[order(d$dbh2), ]
>     d <- transform(d, BAL2 = sum(SBA2) - cumsum(SBA2),
>                                  aa = sum(SBA2))
>     d
>   }
> 
> HTH,
> Dennis
> 
> On Thu, Jul 21, 2011 at 4:13 AM, paloma ruiz benito
> <paloma_rb2@hotmail.com> wrote:
> >
> > Hi everyone,
> >
> > I have been working some days in a nested loop in R but I can't find the solution.
> >
> > I have a data.frame with an unique ID for individuals and unique ID for different stands, for each indiviadual I have a dbh record and a SBA (stand basal area) field.
> >
> > Pma<-rep (1:40)
> > P<-seq(1,4, 1)
> > Plot<-rep(P,10)
> > dbh2<-rnorm(40, mean=200, sd=5)
> > SBA2<-rnorm(40, mean=10, sd=1)
> >
> > As I want to calculate the basal area of larger trees in each stand (i.e., the compare tree to tree the dbh and for each individual sum the stand basal area of larger trees)
> >
> > BAL2<-rep(0,length(Pma))
> > aa<-rep(0,length(Pma))
> >
> > Now I have programed a for loop to do this calculation, and one plot it works quite well:
> >
> > kk<-data.frame(Pma, Plot, dbh2, SBA2, BAL2, aa)
> > kkk<-kk[kk$Plot=="1",]
> >
> >
> > The loop:
> >
> >        for(j in 1:length(kkk$Pma)){
> >            for(i in 1:length(kkk$Pma)){
> >                if(kkk$dbh2[j]<kkk$dbh2[i])
> >                kkk$aa[i]<-kkk$SBA2[i]
> >                else temp_data$aa[i]<-0
> >                kkk$BAL2[j]<-sum(kkk$aa)
> >    }
> >    }
> >
> > But, I have tried a million of forms to calculate this for each stand... and no one looks fine. The closest code that I have got is:
> >
> > for(k in 1:length(kk)){
> >    temp_data<-kk[kk$Plot==Plot[k],]
> >
> >        for(j in 1:length(temp_data$Pma)){
> >    #I have selected the individuals to calculate the BAL in each plot
> >            for(i in 1:length(temp_data$Pma)){
> >                if(temp_data$dbh2[j]<temp_data$dbh2[i])
> >                temp_data$aa[i]<-temp_data$SBA2[i]
> >                else temp_data$aa[i]<-0
> >                temp_data$BAL2[j]<-sum(temp_data$aa)
> >
> >
> >    }
> >
> >    ###Some suggestion to "save" the temporal data of each stand and group it together
> >    }
> >
> > }
> >
> > Any advise or suggestion will be very welcome,
> >
> > Thanks in advance,
> >
> > Paloma
> >
> >
> >        [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > 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.
> >
 		 	   		  
	[[alternative HTML version deleted]]

