R语言拼写错误无警告致严重错误:如何有效规避?
R中如何强制捕获拼写错误并抛出错误?
在R语言中,拼写错误未被检测到的情况时有发生——程序不会给出错误或警告提示,但输出结果却是错误的。这种“看似正常运行实则结果错误”的行为,让用户难以信任程序输出。
是否存在强制R在这类拼写错误发生时抛出错误的选项或方法?
以下示例可说明该问题:
unique(mtcars$gear) # 输出 4 3 5 idx = which(mtcars$gear <= 4) # 正确索引 idx = which(mtcars$gearx <= 4) # 拼写错误:无错误提示,结果错误 x = mtcars$gear + mtcars$carb # 正确计算 x = mtcars$gearx + mtcars$carb # 拼写错误:无错误提示,结果错误 stopifnot(mtcars$gear <= 4) # 正确错误处理 stopifnot(mtcars$gearx <= 4) # 拼写错误:无错误提示,错误处理失效 library(assertthat) assert_that(all(mtcars$gear <= 4)) # 正确错误处理 assert_that(all(mtcars$gearx <= 4)) # 拼写错误:无错误提示,错误处理失效 # 正确条件语句 if (all(mtcars$gear <= 4)) { print("All gears are low") } # 拼写错误:无错误提示,条件语句失效 if (all(mtcars$gearx <= 4)) { print("All gears are low") }
感谢@ada-lovelace的回复,以下并非针对您回复的批评(您的建议很有价值),而是针对R语言的批评——即便采用这些建议,仍无法总能捕获拼写错误。
使用with()函数会消除元素与对象间的紧密绑定,虽能解决上述特定问题,但会引入其他问题:
with(mtcars, which(gearx <= 4))
会正确抛出错误,但:
gearx = 1:5 with(mtcars, which(gearx <= 4))
会执行非预期操作。
warnPartialMatchDollar选项仅能捕获部分拼写错误,无法覆盖全部:
which(mtcars$gea <= 4) # 拼写错误,触发警告 which(mtcars$gearx <= 4) # 拼写错误,无警告
根据您提出的避免使用$的建议,我尝试改用[操作符,这在数据框中有效:
which(mtcars[,"gearx"] <= 4) # 拼写错误,触发错误
但在列表中无效:
mylist = as.list(mtcars) which(mylist[["gearx"]] <= 4) # 拼写错误,无错误提示
最后,如果必须通过避免使用$来解决该问题,我会照做,但这很遗憾,因为$使用起来非常便捷,目前看到的其他解决方案都更为繁琐。
内容的提问来源于stack exchange,提问作者Alex Strashny
相关产品推荐
相关产品推荐

