在 IF 条件下限制向量的 2 个边界

Limit 2 bounds of a vector in IF condition

我想在 IF 条件下限制向量的 2 个边界。但是,当我尝试使用以下函数时,我收到警告“条件的长度 > 1,并且只会使用第一个元素”:

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
}

谁能看出这是什么问题?提前致谢!

我们可以通过用 all

换行来改变循环内的 if 条件
if(all(a<=t) & all(t<=b))

假设我们需要条件满足 't'

as a <= tt <= b returns 与 't' 相同 length 的逻辑向量,这里 't' 创建为从 0 到 364 的序列,即即使其中一个向量的长度为 1,即 'a' 或 'b',比较运算符会对该元素进行循环,以便在较大长度的向量 [=18] 中进行比较=]

5 < (1:6)
#[1] FALSE FALSE FALSE FALSE FALSE  TRUE

if/else要求输入长度为1。