如果在R中满足条件,我想看看是否有一种方法可以重置一个for循环。
例如,如果我有一个虚拟数据集和参数:
# repeatable random numbers
set.seed(999)
# half-hourly time vector
t=seq(0,365,1/48)
# s vec initalized to zero
s = rep_len(0,length(t))
# set parameters
s[1] = 9 # initial value
s_max = 10.0
d = 1.5-cos(2*pi*(t-8/48)) + rlnorm(length(t))
c = 1.9-cos(2*pi*t) + rlnorm(length(t))我有一个for循环,它可以做我想做的事情,并在si <0时创建一个错误:
# time step
for (i in 1:(length(t)-1)) {
if (s[i] < 0) {
print("error: outage has occurred. Increase s_max")
break
}
if (c[i] > d[i]) {
if (s[i] < s_max) {
s[i+1] = s[i] + (c[i]-d[i]) # s increases
if (s[i+1] > s_max) {
s[i+1] = s_max
}
} else {
s[i+1] = s_max
}
} else {
if (s[i] > 0) {
s[i+1] = s[i] + (c[i]-d[i]) # s decreases
}
}
}但是,如果它失败了,那么我必须自己增加s_max!因此,我想知道是否有一种方法可以将我设置为1,再次启动循环,并将s_max增加1。
if (s[i] < 0) {
i = 1
s_max = s_max + 1}以此类推。
但这似乎行不通!我想知道是否有一种方法或函数可以调用它来帮助解决这个问题。
这个例子应该是可复制的,所以请随意尝试它!如果你有什么麻烦请告诉我。
谢谢!
发布于 2022-01-26 17:50:01
不,不能在for循环中修改索引。你应该使用其他类型的循环。例如,
for (i in 1:(length(t)-1)) {
stuff
}是相同的
i <- 0
while (i < (length(t) - 1)) {
i <- i + 1
stuff
}但允许您在i循环中修改while。
https://stackoverflow.com/questions/70867781
复制相似问题