简体   繁体   English

为什么在使用向量并使用“:”的R for循环中存在不等式?

[英]Why are there inequalities in an R for loop using a vector and using “:”?

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. 我写了一个for循环,应该在我的函数中插入某些值。 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. 我只是想告诉循环将值从i = 1插入到i = 1265,但是他所做的是将i定义为1264L。 When i run another code AFTER I did the above he assigns i to 1265. The code is: 当我在执行上述操作后运行另一个代码时,他将i分配给1265。代码为:

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")

When reproducing, it seems the loop stops at the 2nd but last iteration of the loop, hence your i being stuck at 1264L or in the sample data at the 5th iteration. 再现时,似乎循环在循环的第二次但最后一次迭代停止,因此您的i卡在1264L或第五次迭代的样本数据中。 From here it was clear that the problem is with the intervals of the uniroot function. 这里可以清楚地看出问题出在单uniroot函数的间隔上。 As per the suggestion in that link, it worked for me when adding the extendInt = "yes" to the line. 根据该链接中的建议,在将extendInt = "yes"添加到该extendInt = "yes" ,它对我extendInt = "yes"

yield.t.c <- uniroot(q2,c(-1,10),tol = .Machine$double.eps^0.5, extendInt = "yes")$root 

Hope it helps! 希望能帮助到你!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM