【问题标题】:How to check if subscript will be out of bounds?如何检查下标是否超出范围?
【发布时间】:2014-12-16 14:59:02
【问题描述】:

如果我想检查我使用的变量是否存在

exists("variable")

在我正在处理的脚本中,有时在运行后会遇到“下标越界”的问题,然后我的脚本就会停止。在 if 语句中,我希望能够检查下标是否超出范围。如果结果为“是”,则执行脚本的替代和平,如果“不是”,则按预期继续执行脚本。

在我的想象中,如果是一个列表,它看起来像:

if {subscriptOutofBounds(listvariable[[number]]) == TRUE) {

## execute this part of the code
}
else {
## execute this part
}

R 中是否存在类似的东西?

【问题讨论】:

  • How to test if list element exists? 的可能重复项(注意,如果您只对列表使用索引,则可以查看索引是否 > length
  • 我认为您最好将数字与列表的长度进行比较,或者类似!(number%in%seq(length(listvariable)))
  • 我不会试图绕过这个错误,而是更正代码:为什么number 大于listvariable 中的项目数?
  • 使用 length() 有效!!谢谢
  • @vincent,当然,你是完全正确的。问题是我让人们使用一个闪亮的应用程序,它根据交互的类型在列表中构建列表。我时不时地没有成功构建它而没有下标错误。这就是为什么我选择了另一种方法。但话又说回来,我承认这不是最美观的解决方案。

标签: r


【解决方案1】:

您可以将列表的长度与其他数字进行比较。例如,假设我有一个索引为 3 的列表,并希望通过将它们与数字 1 到 100 的向量进行比较来进行检查。

lol <- list(c(1:10),
            c(100:200),
            c(3:50))
lol

check_out <- function(x) {
  maxi <- max(x)
  if (maxi > length(lol)) {

  #Excecute this part of code
  print("Yes")
}
else {
  #Excecute this part of code
  print("No")
}
}

num <- 1:100
check_out(num)

向量 num 的最大数量是 100,而你的列表只有 3 个索引(或长度 =3),所以它会超出你的列表的范围,然后它会返回 Yes

【讨论】:

    猜你喜欢
    • 2015-02-07
    • 1970-01-01
    • 2017-07-21
    • 2021-05-02
    • 2015-05-27
    • 1970-01-01
    • 2021-09-18
    • 2012-04-28
    相关资源
    最近更新 更多