我想在IF条件下限制向量的2个边界。然而,当我尝试使用下面的函数时,我收到警告"the condition has length >1 and only the first element will be use“:
rho <- c(0.8,0,-0.5)
sigma.S <- 0.4
sigma.M <- 0.1
mu.S <- 0.06
T <- 1
N <- 365
dt <- T/N
m <- c(100,102,100,99,101)
z <- rnorm(N)
P <- matrix(0, N, 1)
P[1] <- m[1]
for (i in 2:N){
P[i] <- P[i-1]*( 1 + sigma.M*sqrt(dt)*z[i] )
}
tPts <- c(0,91,182,273,364)
yPts <- c(m[1]-P[1],m[2]-P[92],m[3]-P[183],m[4]-P[274],m[5]-P[365])
a <- tPts[1]
A <- yPts[1]
for(i in 2:5){
t <- seq(0,364,1)
b <- tPts[i]
B <- yPts[i]
if(a<=t & t<=b){
y <- ( B*(t-a) - A*(t-b) )/(b-a)
return(y)
}
a <- b
A <- B
}有人能看到这里的问题所在吗?提前感谢!
发布于 2020-10-04 05:55:12
我们可以通过使用all来改变循环中的if条件
if(all(a<=t) & all(t<=b))假设我们需要条件来满足't‘的长度
由于a <= t或t <= b返回与't‘具有相同length的逻辑向量,并且这里't’被创建为从0到364的序列,即,即使其中一个向量的长度为1,即,'a‘或'b',比较运算符将该元素循环用于跨较大长度的向量进行比较
5 < (1:6)
#[1] FALSE FALSE FALSE FALSE FALSE TRUE并且if/else要求输入的长度为1。
https://stackoverflow.com/questions/64189329
复制相似问题