[R] Constructing loops in which i+1st element depends on ith

Michael Rennie mrennie at utm.utoronto.ca
Mon Jun 30 23:01:01 CEST 2003


I feel greedy posting for help twice in one day- please forgive me, but the 
thesis can't wait.

I have been trying to get an “if
else” statement working in a loop I am 
writing, in which I specify a variable value to 9.2 (Wo) on the first 
iteration, but for subsequent iterations, to adopt a value as a function of 
variables from the previous iteration.

When I comment out the “if
else” statement, let W = Wo, and adjust the rest of 
the file so I am reading the first row of the variables specified instead of 
entire columns in my calculations, the calculations all work nicely without 
errors - I get the numbers I ought to in one row of “bio”.

When I activate the loop and try to run the file with “the if
.else”, it looks 
like it wants to work, but here’s where it stalls;


Error in "[<-"(*tmp*, i, value = ((bio[i - 1, 1] * bio[i - 1, 9])/Ef)) : 
	nothing to replace with
Execution halted

(see complete data file below)...

I guess it’s because it can’t find the alternate case because it hasn’t written 
it yet. 

So, my problem is two-fold:

1.	How can I write my loop properly so that at the end of each iteration, 
it records the row of data from “bio” such that I can cbind it back to my “Day” 
data?

2.	How can I specify the loop to use information from the i+1st element in 
calculations for calculations in the ith? 

I’m pretty sure my problem is in where I create and specify files in the loop, 
but beyond that, I don’t know.

Here’s the part of my command file that’s giving me trouble.  Everything before 
this is simply specifying variable names to numbers, which is not giving be 
problems.



#Bring in temp file

temper <- scan("temp2.dat", na.strings = ".", list(Day=0, Temp=0))

#Day = day on which iteration begins, starts at day 1, ends on 366
#Temp = temperature

Day <- temper$Day ; Temp<-temper$Temp ; 

temp<- cbind (Day, Temp)

#temp [,2]

p<- 0.558626306252032
ACT <- 1.66764519286918

Vc<-((CTM-temp[,2])/(CTM-CTO))
Vr<-((RTM-temp[,2])/(RTM-RTO))


comp<- cbind (Day, Temp, Vc, Vr)


bio<-NULL
M<- length(Day) #number of days iterated
for (i in 1:M)
{

weight<- function(Day)
{
W<-NULL
	if (Day[i]==1) W[i] <- Wo
	{W[i] <- ((bio[i-1,1]*bio[i-1,9])/Ef)
	}
	W
}

W<-weight(Day)
#W<-Wo

C<- p*CA*(W^CB)*((comp[,3]^Xc)*(exp(Xc*(1-comp[,3]))))*Pc

ASMR<- (ACT*RA*(W^(RB))*((comp[,4]^Xa)*(exp(Xa*(1-comp[,4])))))

SMR<- (ASMR/ACT)

A<- (ASMR-SMR)

F<- (FA*(comp[,2]^FB)*(exp(FG*p))*C)

U<- (UA*(comp[,2]^UB)*(exp(UG*p))*(C-F))

SDA<- (S*(C-F))

Gr<- (C-(ASMR+F+U+SDA))

bio<- rbind(c(W, C, ASMR, SMR, A, F, U, SDA, Gr))

dimnames (bio) <-list(NULL, c
("W", "C", "ASMR", "SMR", "A", "F", "U", "SDA", "Gr"))

}

bio


I would be grateful for any suggestions people might have.

Thanks, 

Mike



-- 
Michael Rennie
M.Sc. Candidate
University of Toronto at Mississauga
3359 Mississauga Rd. N.
Mississauga ON  L5L 1C6
Ph: 905-828-5452  Fax: 905-828-3792




More information about the R-help mailing list