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



我对其他编程语言的期望是(1:4)[3:5]list(asdf = 4, qwerty = 5)$asdg都应该引发异常。相反,第一个静默地返回c(3, 4, NA),第二个静默地恢复NULL(与list(asdf = 4, qwerty = 5)[[asdg]]一样(。

虽然这种行为偶尔会很有用,但更多时候(根据我的经验(,它会将一个小的拼写错误、一个错误导致的关闭,或在使用变量的任何地方都无法重命名变量,从一个立即且易于调试的错误的触发器,变成一个真正令人困惑的错误的触发,大约20(或200(步后,当无声传播的CCD_ 6 s或CCD_。(当然,这仍然比它根本不产生错误,只是垃圾结果的时候要好。(

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

我正在寻找一种进行vector/array/list/data.frame/etc.subscripting/member访问的方法,如果我使用无效的索引,该方法将可靠地立即导致错误。对于列表,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

最新更新