R语言函数缺失输入参数时自定义错误信息的实现问题咨询
解决R函数参数缺失时自定义错误信息的问题
问题核心在于:当函数参数未设置默认值时,R会在进入函数体之前就触发参数缺失的默认错误,根本不会执行你写的is.blank判断逻辑。要实现自定义错误,需要先让函数能接收“未传参数”的情况,再在函数体内做检查。
修改方案
- 给所有参数设置默认值
NULL,让调用时不传参数也能进入函数体 - 更新
is.blank函数,加入对NULL的判断 - 结合
missing()检测参数是否未被传入,同时用is.blank检测空值/NA/空字符串场景
修改后的代码:
# 更新is.blank,覆盖NULL、NA、空字符串三种空白情况 is.blank <- function(x) is.null(x) || is.na(x) || x == "" generate_something <- function(n = NULL, m = NULL, roll = NULL) { # 检查n:未传入或空白都触发错误 if (missing(n) || is.blank(n)) { stop("Missing number of blocks.") } # 检查m:未传入或空白都触发错误 if (missing(m) || is.blank(m)) { stop("Missing M number.") } # 检查roll:当m>27时,未传入或空白触发错误 if ((missing(roll) || is.blank(roll)) && m > 27) { stop("Missing roll where relevant.") } }
测试验证
- 调用
generate_something(m = 34, roll = 1),会返回自定义错误:Error in generate_something(m = 34, roll = 1) : Missing number of blocks. - 调用
generate_something(n=10, m=30),会返回:Error in generate_something(n = 10, m = 30) : Missing roll where relevant. - 调用
generate_something(n="", m=5),会返回:Error in generate_something(n = "", m = 5) : Missing number of blocks.
补充说明
之前设置NULL没用的原因:
- 原
is.blank函数没有处理NULL的情况,无法识别默认的NULL参数为空白 - 没有结合
missing()判断参数是否未被传入,只靠is.blank会遗漏“完全没传参数”的场景
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

