首页 > 解决方案 > 为什么在 for 循环执行期间下标超出范围?

问题描述

在我的脚本中是否有可能获得d[[x]]“空”。我试图用 来做else,但它不起作用。

如何编写else以便它可以给出检查零的结果?

for (x in 1:licznik3) 
{
  if(a[[x]] > d[[x]]) 
  {
    out3[[x]] <- wspolne3[[x]]
  }
  else (a[[x]] < d[[x]]) 
  {
    out3[[x]] <- NA

  }
}

变量:

> a
 [1] 0.1
> d
numeric(0)
> licznik3
[1] 16

d[[x]] 中的错误:下标越界

例子:

我有 3 个循环。

如果a[[x]]大于d[[x]]

这个值去out3

下一个循环检查类似的条件。

我的问题是在第二个循环中(显示的代码)d[[x]]可以为空(在前一个循环中没有值大于a[[x]]

然后我们有如何

> a
  [1] 0.1
> d
numeric (0)

标签: rfor-loop

解决方案


只需添加额外的检查,以确保您的计数器 aka licznik3 ;) 不会超过 vector 的长度d。如果超过break for-loop。

a <- 1:10
licznik3 <- 7
out3 <- rep_along(a, NA)
wspolne3 <- 2:12
d <- -c(1, 4, 2)

for (x in 1:licznik3) {
  if (x > length(d)) {
    break
  }

  if (a[[x]] > d[[x]]) {
    out3[[x]] <- wspolne3[[x]]
  } else {
    out3[[x]] <- NA
  }
}

out3

推荐阅读