如何解决在IF条件下限制向量的2个边界
我想在IF条件下限制向量的2个边界。但是,当我尝试使用以下功能时,我得到警告“条件的长度> 1,并且只会使用第一个元素”:
rho <- c(0.8,-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
}
有人可以看到这里的问题吗?预先感谢!
解决方法
我们可以通过用if
包装来更改循环内的all
条件
if(all(a<=t) & all(t<=b))
假设我们需要满足“ t”长度的条件
如a <= t
或t <= b
返回与{t相同的length
的逻辑向量,并且此处't'被创建为从0到364的序列,即向量的长度为1,即“ a”或“ b”,比较运算符会在较大长度的向量上对该元素进行do循环以进行do比较。
5 < (1:6)
#[1] FALSE FALSE FALSE FALSE FALSE TRUE
和if/else
要求输入的长度为1。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。