如何在R语言stopifnot中使用paste输出变量相关提示信息?
在R中用stopifnot输出变量驱动的提示信息
直接用paste或变量作为stopifnot的命名参数名会报错,这是因为R语法要求函数的命名参数名必须是字面常量,不能是表达式或变量引用——你写msg = NULL时,参数名实际是字符串"msg",而不是变量msg的值。
要实现动态提示信息,有两种可行方案:
方案1:用do.call构造动态命名参数
通过setNames生成带动态名称的参数列表,再用do.call传递给stopifnot,完美模拟字面量命名参数的效果:
# 生成动态提示信息 msg <- paste("a", "a msg") # 用do.call调用stopifnot,参数名由msg动态指定 do.call(stopifnot, setNames(list(NULL), msg))
执行后会输出预期的动态报错:Error in do.call(stopifnot, setNames(list(NULL), msg)) : a a msg
方案2:结合if和stop替代stopifnot
如果不需要严格绑定stopifnot的调用形式,直接用条件判断+自定义报错信息更直观灵活:
# 示例:判断x是否大于0 x <- -5 msg <- paste("x必须大于0,当前值为", x) if (! (x > 0)) { stop(msg) }
执行后会输出:Error in eval(expr, envir, enclos) : x必须大于0,当前值为 -5
内容的提问来源于stack exchange,提问作者tomato_soup
相关产品推荐
相关产品推荐

