簡體   English   中英

為什么在使用向量並使用“:”的R for循環中存在不等式?

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

我沒有真正的問題,但是由於編寫方案的不同,我的代碼並沒有得到什么不同。

情況如下:

我寫了一個for循環,應該在我的函數中插入某些值。 在執行此操作之前,我先定義了要插入的參數。 代碼如下:

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 = 1插入到i = 1265,但是他所做的是將i定義為1264L。 當我在執行上述操作后運行另一個代碼時,他將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)

(請注意新間隔作為向量)現在他特別為我提供了最后一個值的正確解決方案。 但是,當我僅運行第二個代碼時,除了第一個值之外,它根本無法提供正確的解決方案。 因此,我的解決方法是彼此同時運行兩個代碼,但我想知道為什么我不能僅運行第二個代碼,或者為什么第一個代碼在最后一個值之前停止。

我希望任何人都能提供幫助。

編輯:

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

樣本數據:

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

再現時,似乎循環在循環的第二次但最后一次迭代停止,因此您的i卡在1264L或第五次迭代的樣本數據中。 這里可以清楚地看出問題出在單uniroot函數的間隔上。 根據該鏈接中的建議,在將extendInt = "yes"添加到該extendInt = "yes" ,它對我extendInt = "yes"

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

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM