在 R 中,有时可能无法检测到拼写错误,从而导致不正确的结果,而没有任何错误或警告。程序运行起来好像没有问题,但输出是错误的。
是否有选项或方法可以强制 R 在发生此类拼写错误时发出错误?当前的行为使得信任任何程序的结果都具有挑战性,因为程序可能看起来正确,但会产生不正确的输出。
以下是说明此问题的一些示例:
unique(mtcars$gear) # 4 3 5
idx = which(mtcars$gear <= 4) # Correct indexing
idx = which(mtcars$gearx <= 4) # Typo: no error, incorrect result
x = mtcars$gear + mtcars$carb # Correct calculation
x = mtcars$gearx + mtcars$carb # Typo: no error, incorrect result
stopifnot(mtcars$gear <= 4) # Correct error handling
stopifnot(mtcars$gearx <= 4) # Typo: no error, incorrect error handling
library(assertthat)
assert_that(all(mtcars$gear <= 4)) # Correct error handling
assert_that(all(mtcars$gearx <= 4)) # Typo: no error, incorrect error handling
# Correct conditional statement
if (all(mtcars$gear <= 4)) {
print("All gears are low")
}
# Typo: no error, incorrect conditional statement
if (all(mtcars$gearx <= 4)) {
print("All gears are low")
}
美元运算符在您所描述的意义上是“已知的危险”,它最适合交互式探索性数据工作(例如制表符补全可以工作)。
对于程序化工作,您可以采用不同的索引方式。 一种选择是使用
with()
如
> idx <- which(with(mtcars, gear <= 4))
如果您尝试使用(不存在的)
gearx
,您可能会出现错误:
> idx <- which(with(mtcars, gearx <= 4))
Error in eval(substitute(expr), data, enclos = parent.frame()) :
object 'gearx' not found
>