R语言如何使用stopifnot校验参数并输出自定义错误信息
R自定义函数入参类型校验的正确实现
两种实现思路的正确用法如下:
- 第一种
if条件判断搭配stop()的写法本身逻辑完全正确,是兼容性最好、适用所有R版本的通用方案:当判断x不是list类型时会立刻终止函数执行,抛出你预设的自定义错误,不会运行后续业务代码。
参考实现:
myfunction <- function(x, y){ # 校验入参x必须为list类型 if (!is.list(x)){ stop("Error: x must be a list") } # 校验通过后编写后续业务逻辑 }
- 第二种
stopifnot()的实现你之前的写法有逻辑问题:stopifnot()在校验条件不满足时会直接终止函数运行,你写在后面的print()错误提示根本没有执行机会。从R 4.0.0版本开始,stopifnot()支持直接为校验表达式命名,名称内容就会作为自定义错误提示抛出,不需要额外加打印语句。stopifnot()版本参考实现(仅支持R 4.0.0及以上版本):
myfunction <- function(x, y){ # 校验入参x必须为list类型,附带自定义错误提示 stopifnot("Error: x must be a list" = is.list(x)) # 校验通过后编写后续业务逻辑 }
如果你的代码需要兼容R 4.0.0以下的旧版本,优先选择第一种if+stop()的写法,不会出现兼容性问题;无需兼容旧版本时两种写法可按需选用。
内容的提问来源于stack exchange,提问作者abraham
相关产品推荐
相关产品推荐

