I have not a real problem but I don't quite get the difference in my code due to different writing schemes.
The situation is as follows:
I wrote a for loop that should insert certain values in my function. Before I did this I defined the parameters to insert. The code looks like this:
yield <- rep(1, nrow(timeseries1))
pc <- c(1:1265)
tc <- c(1:1265)
for(i in 1:1265){
pc[i] <- timeseries1$`CoCo-Preis`[i]
tc[i] <- timeseries1$t[i]
yield[i] <- yield.to.call(ytc,p=pc[i],t=tc[i],c=5,N=100)
}
yield <- data.table(yield)
I simply want to tell the loop to insert the values from i=1 to i=1265 but what he does is to define i as 1264L. When i run another code AFTER I did the above he assigns i to 1265. The code is:
for(i in c(1,1265)){
pc[i] <- timeseries1$`CoCo-Preis`[i]
tc[i] <- timeseries1$t[i]
yield[i] <- yield.to.call(ytc,p=pc[i],t=tc[i],c=5,N=100)
}
yield <- data.table(yield)
(Note the new interval as a vector) Now he especially offers me the right solution for the last value. But when I only run this second code it does not yield the right solutions at all apart from only the first value. So my workaround is to run both codes after each other but I want to know why I simply cannot run the second code only or why the first code stops before the last value.
I hope that anyone can help.
EDIT:
yield.to.call <- function(ytc,p,c,t,f=4,N=100){
c <- c/f #new to adjust the coupon
if(t<92){t <- ((92-t)/(92-0))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+c/((1+(ytc/f)))^(t+11)+c/((1+(ytc/f)))^(t+12)+c/((1+(ytc/f)))^(t+13)+c/((1+(ytc/f)))^(t+14)+c/((1+(ytc/f)))^(t+15)+c/((1+(ytc/f)))^(t+16)+c/((1+(ytc/f)))^(t+17)+c/((1+(ytc/f)))^(t+18)+(c+N)/((1+(ytc/f)))^(t+19)-p}}
else if(t<184){t <- ((184-t)/(184-92))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+c/((1+(ytc/f)))^(t+11)+c/((1+(ytc/f)))^(t+12)+c/((1+(ytc/f)))^(t+13)+c/((1+(ytc/f)))^(t+14)+c/((1+(ytc/f)))^(t+15)+c/((1+(ytc/f)))^(t+16)+c/((1+(ytc/f)))^(t+17)+(c+N)/((1+(ytc/f)))^(t+18)-p}}
else if(t<275){t <- ((275-t)/(275-184))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+c/((1+(ytc/f)))^(t+11)+c/((1+(ytc/f)))^(t+12)+c/((1+(ytc/f)))^(t+13)+c/((1+(ytc/f)))^(t+14)+c/((1+(ytc/f)))^(t+15)+c/((1+(ytc/f)))^(t+16)+(c+N)/((1+(ytc/f)))^(t+17)-p}}
else if(t<365){t <- ((365-t)/(365-275))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+c/((1+(ytc/f)))^(t+11)+c/((1+(ytc/f)))^(t+12)+c/((1+(ytc/f)))^(t+13)+c/((1+(ytc/f)))^(t+14)+c/((1+(ytc/f)))^(t+15)+(c+N)/((1+(ytc/f)))^(t+16)-p}}
else if(t<457){t <- ((457-t)/(457-365))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+c/((1+(ytc/f)))^(t+11)+c/((1+(ytc/f)))^(t+12)+c/((1+(ytc/f)))^(t+13)+c/((1+(ytc/f)))^(t+14)+(c+N)/((1+(ytc/f)))^(t+15)-p}}
else if(t<548){t <- ((548-t)/(548-457))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+c/((1+(ytc/f)))^(t+11)+c/((1+(ytc/f)))^(t+12)+c/((1+(ytc/f)))^(t+13)+(c+N)/((1+(ytc/f)))^(t+14)-p}}
else if(t<639){t <- ((639-t)/(639-548))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+c/((1+(ytc/f)))^(t+11)+c/((1+(ytc/f)))^(t+12)+(c+N)/((1+(ytc/f)))^(t+13)-p}}
else if(t<730){t <- ((730-t)/(730-639))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+c/((1+(ytc/f)))^(t+11)+(c+N)/((1+(ytc/f)))^(t+12)-p}}
else if(t<821){t <- ((821-t)/(821-730))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+c/((1+(ytc/f)))^(t+10)+(c+N)/((1+(ytc/f)))^(t+11)-p}}
else if(t<915){t <- ((915-t)/(915-821))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+c/((1+(ytc/f)))^(t+9)+(c+N)/((1+(ytc/f)))^(t+10)-p}}
else if(t<1006){t <- ((1006-t)/(1006-915))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+c/((1+(ytc/f)))^(t+8)+(c+N)/((1+(ytc/f)))^(t+9)-p}}
else if(t<1097){t <- ((1097-t)/(1097-1006))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+c/((1+(ytc/f)))^(t+7)+(c+N)/((1+(ytc/f)))^(t+8)-p}}
else if(t<1188){t <- ((1188-t)/(1188-1097))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+c/((1+(ytc/f)))^(t+6)+(c+N)/((1+(ytc/f)))^(t+7)-p}}
else if(t<1280){t <- ((1280-t)/(1280-1188))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+c/((1+(ytc/f)))^(t+5)+(c+N)/((1+(ytc/f)))^(t+6)-p}}
else if(t<1371){t <- ((1371-t)/(1371-1280))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+c/((1+(ytc/f)))^(t+4)+(c+N)/((1+(ytc/f)))^(t+5)-p}}
else if(t<1461){t <- ((1461-t)/(1461-1371))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+c/((1+(ytc/f)))^(t+3)+(c+N)/((1+(ytc/f)))^(t+4)-p}}
else if(t<1553){t <- ((1553-t)/(1553-1461))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+c/((1+(ytc/f)))^(t+2)+(c+N)/((1+(ytc/f)))^(t+3)-p}}
else if(t<1645){t <- ((1645-t)/(1645-1553))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+c/((1+(ytc/f)))^(t+1)+(c+N)/((1+(ytc/f)))^(t+2)-p}}
else if(t<1736){t <- ((1736-t)/(1736-1645))
q <- function(ytc,p,c,t,f=4,N=100){c/((1+(ytc/f)))^(t)+(N+c)/((1+(ytc/f)))^(t+1)-p}}
else if(t<1826){t<-((1826-t)/(1826-1736))
q <- function(ytc,p,c,t,f=4,N=100){(N+c)/(1+(ytc/f))^(t)-p}}
else q <- function(ytc,p,c,t=0,f=4,N=100){((N+c)/p)-((ytc/f))-1}
q2<- function(ytc){q(ytc,p,c,t,N=100)}
yield.t.c <- uniroot(q2,c(-1,10),tol = .Machine$double.eps^0.5)$root
return(yield.t.c)
}
Sample data:
structure(list(Datum = structure(c(17960, 17961, 17962, 17963,
17966, 17967), class = "Date"), `CoCo-Preis` = c(98.19, 98.14,
98.21, 97.97, 98.01, 98.03), `CDS-Spread` = c(55.67, 55.23, 55.64,
56.27, 55.05, 53.33), Aktienpreis = c(4.244, 4.3145, 4.163, 4.0785,
4.1375, 4.142), Zins = c(-0.287467, -0.31443, -0.360349, -0.351772,
-0.363637, -0.36096), t = c(1819L, 1820L, 1821L, 1822L, 1825L,
1826L)), row.names = 1260:1265, class = "data.frame")