如何为R语言函数的无效入参自定义有用的错误提示信息
R函数废弃参数自定义提示实现方案
要实现传入废弃旧参数时返回友好提示,核心思路是通过函数参数中的...捕获所有未被显式定义的传入参数,再对参数名称做自定义校验,对应实现代码如下:
版本1:检测到废弃参数直接返回自定义错误
my_function <- function(arg_1, new_arg_2, ...){ # 提取所有额外传入的参数名 extra_arg_names <- names(list(...)) # 校验是否存在废弃参数arg_2 if ("arg_2" %in% extra_arg_names) { stop("你传入了arg_2参数,或许你想使用的是new_arg_2", call. = FALSE) } # 原有业务逻辑 string <- paste(arg_1, new_arg_2, sep = " ") return(string) }
调用测试:
my_function(arg_1 = "Hello", arg_2 = "World!") # 错误: 你传入了arg_2参数,或许你想使用的是new_arg_2
版本2:向下兼容旧参数调用(推荐)
如果需要兼容旧版本的调用逻辑,可以加自动赋值逻辑,仅返回警告提示用户后续改用新参数:
my_function <- function(arg_1, new_arg_2, ...){ extra_args <- list(...) extra_arg_names <- names(extra_args) if ("arg_2" %in% extra_arg_names) { if (missing(new_arg_2)) { # 未传新参数时自动用旧参数的值赋值 new_arg_2 <- extra_args[["arg_2"]] warning("参数arg_2已废弃,已自动将值映射到新参数new_arg_2,请后续调用使用new_arg_2", call. = FALSE) } else { stop("你同时传入了已废弃参数arg_2和新参数new_arg_2,请仅保留new_arg_2参数", call. = FALSE) } } # 原有业务逻辑 string <- paste(arg_1, new_arg_2, sep = " ") return(string) }
调用测试:
# 仅传旧参数时正常运行加警告 my_function(arg_1 = "Hello", arg_2 = "World!") # 警告信息:参数arg_2已废弃,已自动将值映射到新参数new_arg_2,请后续调用使用new_arg_2 # [1] "Hello World!" # 新旧参数同时传时报错 my_function(arg_1 = "Hello", new_arg_2 = "Hi", arg_2 = "World!") # 错误: 你同时传入了已废弃参数arg_2和新参数new_arg_2,请仅保留new_arg_2参数
实现原理
R函数参数中定义的...会接收所有未被显式声明的传入参数,通过list(...)可以将这些参数转换为命名列表,即可获取额外传入的参数名称和值,实现自定义的参数校验逻辑。
内容的提问来源于stack exchange,提问作者Greg
相关产品推荐
相关产品推荐

