我这个功能
gillespied4 <- function (N, T = 100, dt = 1, ...)
{
tt = 0
n = T%/%dt
x = N$M
S = t(N$Post - N$Pre)
u = nrow(S)
v = ncol(S)
xmat = matrix(ncol = u, nrow = n)
i = 1
target = 0
repeat {
h = N$h(x, tt, ...)
h0 = sum(h)
if (h0 < 1e-10)
tt = 1e+99
else tt = tt + rexp(1, h0)
while (tt >= target) {
xmat[i, ] = x
i = i + 1
target = target + dt
if ((i*dt) ==c(seq(0,30000,2000))){
x[4] = x[4]+(10000/15000)
}
if (i > n)
return(ts(xmat, start = 0, deltat = dt))
}
j = sample(v, 1, prob = h)
x = x + S[, j]
}
}
,我遇到了行
的问题 if ((i*dt) ==c(seq(0,30000,2000))){
x[4] = x[4]+(10000/15000)
}
我得到的错误是
In if ((i * dt) == c(seq(0, 30000, 2000))) { ... :
the condition has length > 1 and only the first element will be used
我知道问题是if
函数不适用于多个值。在搜索stackoverflow之后,大多数此类问题的答案建议使用elseif
函数或使用|
,但我不认为这些适用于此情况。
我想知道是否有办法克服这个问题