r - 是否有一致的方法来强制错误列表或向量索引出错

标签 r indexing slice member-access fail-fast-fail-early

我对其他编程语言的期望是 (1:4)[3:5]list(asdf = 4, qwerty = 5)$asdg 都应该提出异常(exception)情况。相反,第一个默默地返回 c(3, 4, NA),第二个默默地返回 NULL (如或 list(asdf = 4, qwerty = 5)[[asdg]])。

虽然这种行为偶尔有用,但更常见的是(根据我的经验),它会导致一个小拼写错误、相差一个错误,或者无法在触发器中使用的任何地方重命名变量。立即且易于调试的错误,当默默传播 NULLNA 时,会触发大约 20(或 200)步的真正令人困惑的错误。最终被送入一个对它们来说很响亮的函数或操作中。 (当然,这仍然比根本不产生错误、只产生垃圾结果的时代要好。)

data.frame()[,'wrong'] 给出错误,但 data.frame()['wrong',] 仅返回 NA .

我正在寻找的是一种执行向量/数组/列表/data.frame/等的方法。如果我使用无效的索引,下标/成员访问将立即可靠地导致错误。对于列表, get('wrong', list()) 可以满足我的要求,但有时可能会很丑陋(特别是如果使用结果作为其他内容的下标)。它是可用的,但有更好的东西就更好了。对于向量(和 data.frame ),即使这样也不起作用。

有什么好的方法吗?

最佳答案

我不确定您是否可以在全局范围内更改此行为,但您可以根据数据类型根据需要单独处理它们。

例如,对于向量 -

subset_values <- function(x, ind) {
  if(min(ind) > 0 && max(ind) <= length(x)) x[ind]
  else stop('Incorrect length')
}

subset_values(1:4, 3:5)
#Error in subset_values(1:4, 3:5) : Incorrect length

subset_values(1:4, -1:3)
#Error in subset_values(1:4, -1:3) : Incorrect length

subset_values(1:4, 1:3)
#[1] 1 2 3

关于r - 是否有一致的方法来强制错误列表或向量索引出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68493369/

相关文章:

sql - R 和 MSSQL - 与临时表的通信(在 channel 上找不到表)

r - 如何使用R从图像中获取像素数据

r - Mac - Sublime Text 和 R

python - numpy 数组中看似不一致的切片行为

go - slice 的零值不为零

c++ - 重载运算符 `[ ]` 和 ':'

r - 过滤渲染数据表 Shiny

数据库位图索引

indexing - 在 Mongodb 中通过 ObjectId 查找有多快?

Python:一种使用索引列表对列表进行切片的有效方法