Reputation: 15
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
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
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