python_person
python_person

Reputation: 15

How do I fix an off by one error for my for loop?

I'm having trouble with a for loop. It's giving me an "off by one error." I did count the observations and it was indeed one off. How do I fix it?

Code:

delta = seq(0,1,0.05)
delta2 = seq(0,1,0.01)
delta3 = seq(0,1,0.001)

price1 = rep(1,length(delta))
price2 = rep(1,length(delta2))
price3 = rep(1,length(delta3))

for(i in 2:length(delta)){
  price1[i] = price1[i-1]+price1[i-1]*rnorm(1)*sqrt(delta)
  price1[i+1] = price1[i] + i
  print(price1[i+1])
}


plot(delta,price1[i+1], type = "l") #Error occurs here

for(i in 2:length(delta2)){
  price2[i] = price2[i-1] + price2[i-1]*rnorm(1)*sqrt(delta2)
  price2[i] = price2[i] + i
  print(price2[i])
}

plot(delta2, price2[i], type = "l") #error here

for(i in 2:length(delta3)){
  price3[i] = price3[i-1] +  price3[i-1]*rnorm(1)*sqrt(delta3)
  xprice3[i] = price3[i] + i
  print(price3[i])
}

plot(delta3, price3[i], type = "l") #error here



The error states:

Error in xy.coords(x, y, xlabel, ylabel, log) : 'x' and 'y' lengths differ

Upvotes: 0

Views: 71

Answers (2)

Sudaraka
Sudaraka

Reputation: 125

You don't really need loops for this, but is this what you're looking for?

delta = seq(0,1,0.05)
delta2 = seq(0,1,0.01)
delta3 = seq(0,1,0.001)

price1 = rep(1,length(delta))
price2 = rep(1,length(delta2))
price3 = rep(1,length(delta3))

for(i in 2:length(delta)){
  price1[i] = price1[i-1]+price1[i-1]*rnorm(1)*sqrt(delta[i])
  price1[i] = price1[i] + i
  print(price1[i])
}


plot(delta,price1, type = "l") #Error occurs here

for(i in 2:length(delta2)){
  price2[i] = price2[i-1] + price2[i-1]*rnorm(1)*sqrt(delta2[i])
  price2[i] = price2[i] + i
  print(price2[i])
}

plot(delta2, price2, type = "l") #error here

for(i in 2:length(delta3)){
  price3[i] = price3[i-1] +  price3[i-1]*rnorm(1)*sqrt(delta3[i])
  price3[i] = price3[i] + i
  print(price3[i])
}

plot(delta3, price3, type = "l") #error here

Upvotes: 1

Ronak Shah
Ronak Shah

Reputation: 388862

Probably, you are looking for :

delta = seq(0,1,0.05)
delta2 = seq(0,1,0.01)
delta3 = seq(0,1,0.001)

price1 = rep(1,length(delta))
price2 = rep(1,length(delta2))
price3 = rep(1,length(delta3))

for(i in 2:length(delta)){
   price1[i] = price1[i-1]+price1[i-1]*rnorm(1)*sqrt(delta[i])
}
plot(delta,price1, type = "l")


for(i in 2:length(delta2)){
   price2[i] = price2[i-1]+price2[i-1]*rnorm(1)*sqrt(delta2[i])
}
plot(delta2,price2, type = "l")

for(i in 2:length(delta3)){
  price3[i] = price3[i-1]+price3[i-1]*rnorm(1)*sqrt(delta3[i])
}
plot(delta3,price3, type = "l")

Upvotes: 0

Related Questions