首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:如果满足条件,是否可以在for循环中将索引设置为1?

R:如果满足条件,是否可以在for循环中将索引设置为1?
EN

Stack Overflow用户
提问于 2022-01-26 17:32:14
回答 1查看 38关注 0票数 0

如果在R中满足条件,我想看看是否有一种方法可以重置一个for循环。

例如,如果我有一个虚拟数据集和参数:

代码语言:javascript
复制
# 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时创建一个错误:

代码语言:javascript
复制
# 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。

代码语言:javascript
复制
if (s[i] < 0) {
    i = 1
    s_max = s_max + 1}

以此类推。

但这似乎行不通!我想知道是否有一种方法或函数可以调用它来帮助解决这个问题。

这个例子应该是可复制的,所以请随意尝试它!如果你有什么麻烦请告诉我。

谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-26 17:50:01

不,不能在for循环中修改索引。你应该使用其他类型的循环。例如,

代码语言:javascript
复制
for (i in 1:(length(t)-1)) {
  stuff
}

是相同的

代码语言:javascript
复制
i <- 0
while (i < (length(t) - 1)) {
  i <- i + 1
  stuff
}

但允许您在i循环中修改while

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70867781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档