gpt4 book ai didi

r - R 函数的半自动参数验证

转载 作者:行者123 更新时间:2023-12-05 00:28:40 25 4
gpt4 key购买 nike

我希望 R 包(S3 样式)中的最终用户函数验证它们的参数,并在特定有效性检查失败时向用户提供信息性错误或警告。

这样做的明显(但乏味且不可维护)的方法是:

foo<-function(aa,bb,cc,dd){
if(length(aa)!=1) stop("The argument 'aa' must have a single value");
if(!is.numeric(aa)) stop("The argument 'aa' must be numeric");
if(!is.character(bb)) stop("The argument 'bb' must be a character");
if(length(bb)>=4||length(bb)<=2) stop("The argument 'bb' must be a vector with a length between 2 and 4");
if(!is.recursive(cc)) stop("The argument 'cc' must be a list-like object");
if(!is.integer(dd)) stop("The argument 'dd' must contain only integers");
if(any(dd<aa)) stop("All values in the argument 'dd' must be greater than the value of argument 'aa'");
## ...and so on
}

我假设我不是第一个这样做的人。那么,有人可以推荐一个可以自动化所有或部分此类验证任务的软件包吗?或者,如果做不到这一点,一些简洁、通用的习惯用法会将丑陋限制在每个函数中尽可能少的行?

谢谢。

最佳答案

stopifnot可能与您要查找的内容相似。虽然错误消息不会那么好

foo <- function(x){
stopifnot(length(x) == 1, is.numeric(x))
return(x)
}

这使
> foo(c(1,3))
Error: length(x) == 1 is not TRUE
> foo("a")
Error: is.numeric(x) is not TRUE
> foo(3)
[1] 3

关于r - R 函数的半自动参数验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18541254/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com