为什么下标在for循环执行期间超出范围?

时间:2018-07-09 14:07:36

标签: r for-loop

在我的脚本中可以获取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)

1 个答案:

答案 0 :(得分:0)

只需添加其他检查,确保您的计数器又名licznik3;)不会超过向量d的长度。如果超过break for循环。

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