在 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 <= t
或 t <= b
returns 与 't' 相同 length
的逻辑向量,这里 't' 创建为从 0 到 364 的序列,即即使其中一个向量的长度为 1,即 'a' 或 'b',比较运算符会对该元素进行循环,以便在较大长度的向量 [=18] 中进行比较=]
5 < (1:6)
#[1] FALSE FALSE FALSE FALSE FALSE TRUE
和if/else
要求输入长度为1。
我想在 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 <= t
或 t <= b
returns 与 't' 相同 length
的逻辑向量,这里 't' 创建为从 0 到 364 的序列,即即使其中一个向量的长度为 1,即 'a' 或 'b',比较运算符会对该元素进行循环,以便在较大长度的向量 [=18] 中进行比较=]
5 < (1:6)
#[1] FALSE FALSE FALSE FALSE FALSE TRUE
和if/else
要求输入长度为1。