提问人:Andrea 提问时间:9/26/2023 最后编辑:Konrad RudolphAndrea 更新时间:9/26/2023 访问量:47
为缺少函数输入生成特定的错误代码
Generate specific error code for missing function input
问:
我有两个类似于以下功能的功能。第一个检测变量是否为空,而第二个变量将生成与此问题无关的内容。我希望第二个函数在其中带有“if”的条件下输出以下特定的错误消息:
is.blank <- function(x) is.na(x) | x == ""
generate_something <- function(n, m, roll) {
if (is.blank(n)) {
stop("Missing number of blocks.")
}
if (is.blank(m)) {
stop("Missing M number.")
}
if (is.blank(roll) && m > 27) {
stop("Missing roll where relevant.")
}
}
但是,当我尝试在缺少任何输入的情况下运行 generate_something() 时,R 不能很好地处理这一点。相反,它会给我自己的错误消息:
Error in generate_something(m = 34, roll = 1) :
argument "n" is missing with no default
但是,如果我定义所有输入都等于 NULL 的函数,那么这也不能解决问题。我能做些什么来解决这个问题?
答:
1赞
DaveArmstrong
9/26/2023
#1
我认为要做到这一点,你必须包括 ,但你必须首先评估它,然后如果不是,评估其他条件:is.null(x)
is.blank()
NULL
is.blank <- function(x) is.null(x) || is.na(x) || x == ""
generate_something <- function(n=NULL, m=NULL, roll=NULL) {
if (is.blank(n)) {
stop("Missing number of blocks.")
}
if (is.blank(m)) {
stop("Missing M number.")
}
if (is.blank(roll) && m > 27) {
stop("Missing roll where relevant.")
}
}
generate_something()
#> Error in generate_something(): Missing number of blocks.
generate_something(n=4)
#> Error in generate_something(n = 4): Missing M number.
generate_something(n=4, m=6)
创建于 2023-09-26 使用 reprex v2.0.2
评论
0赞
Andrea
9/26/2023
我有什么方法可以修改is.blank(),以便我可以以相同的方式使用它,并具有您显示的相同结果?
0赞
DaveArmstrong
9/26/2023
@Andrea 我刚刚上传了一个修改 .is.blank()
1赞
DaveArmstrong
9/26/2023
谢谢@KonradRudolph - 我更新了答案。
1赞
Ronak Shah
9/26/2023
#2
我想@MrFlick已经回答了你的问题。你正在寻找的是功能,而不是空白。missing
generate_something <- function(n, m, roll) {
if (missing(n) || is.blank(n)) {
stop("Missing number of blocks.")
}
if (missing(m) || is.blank(m)) {
stop("Missing M number.")
}
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 = 2, roll = 1)
#Error in generate_something(n = 2, roll = 1) : Missing M number.
generate_something(n = 2, m = 34)
#Error in generate_something(n = 2, m = 34) : Missing roll where relevant.
generate_something(n = 2, m = 34, roll = 2)
评论
missing
n
generate_something(m = 34, roll = 1)
n
n
generate_something <- function(n = NA, m, roll)