【问题标题】:Why subscript is out of bounds during for loops execution?为什么在 for 循环执行期间下标超出范围?
【发布时间】:2018-12-17 06:10:05
【问题描述】:

在我的脚本中是否有可能获得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)

【问题讨论】:

  • 如果你不提供一个工作示例,没有人可以帮助你,其中向量 licznik3 和 wspolne3 是明确的。
  • 请提供minimal reproducible example。很难弄清楚你在问什么。例如,短语“它不熄灭”没有明确的含义。 “它”是什么,“它”不能“走出去”是什么意思?
  • 已编辑帖子中的示例
  • 您的示例对某些人有所帮助,但仍不清楚预期的输出是什么。如果d[[x]] 未定义会发生什么?为什么不简单地检查d 在循环之前 如果d 为空则不执行循环?

标签: r for-loop


【解决方案1】:

只需添加额外的检查以确保您的计数器 aka licznik3 ;) 不会超过向量 d 的长度。如果超过breakfor-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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多