R 中的拼写错误可能会在没有警告的情况下导致重大错误 - 如何缓解这种情况?

问题描述 投票:0回答:1

在 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")
}

r debugging error-handling runtime-error
1个回答
0
投票

美元运算符在您所描述的意义上是“已知的危险”,它最适合交互式探索性数据工作(例如制表符补全可以工作)。

对于程序化工作,您可以采用不同的索引方式。 一种选择是使用

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  
>  
© www.soinside.com 2019 - 2024. All rights reserved.