我对其他编程语言的期望是(1:4)[3:5]
并且list(asdf = 4, qwerty = 5)$asdg
都应该引发异常。相反,第一个静默返回c(3, 4, NA)
,第二个静默返回NULL
(如 or 一样list(asdf = 4, qwerty = 5)[[asdg]]
)。
虽然这种行为有时会很有用,但更常见的是(根据我的经验),它会变成一个小错字、一个错误,或者无法在任何地方重命名变量,因为它从触发器中使用,以便立即轻松地使用-to-debug 错误,当静默传播NULL
的 s 或NA
s 最终被输入到一个对它们来说很响亮的函数或操作时,触发一个真正令人费解的错误,大约 20(或 200)步。(当然,这仍然比它根本不产生错误,只是垃圾结果的时候要好。)
data.frame()[,'wrong']
给出一个错误,但data.frame()['wrong',]
只返回NA
.
我正在寻找的是一种方法来做向量/数组/列表/data.frame/等。如果我使用无效的索引,下标/成员访问将立即可靠地导致错误。对于列表,get('wrong', list())
我正在寻找什么,但这有时会非常难看(特别是如果使用结果作为下标其他内容)。它是可用的,但更好的东西会很好。对于向量(和 data.frame rows),即使这样也行不通。
有没有好的方法来做到这一点?