R 函数不会按预期抛出错误
R Function Doesn't Throw Error As Expected
问题结尾是脚本(加上 github). The GitHub repo is here 并且可以用
安装
install.packages("devtools")
devtools::install_github("ArtieLadie/RanglaPunjab")
MergePalette(name,name2)
有两个名字。如果 person 只传递一个名字,我希望执行下面的函数然后退出函数,
Enter 2 valid palettes. Run ListPalette() for list of palettes.
不幸的是,当我执行 MergePalette("Teej")
时,我得到
Error in MergePalette("Teej") :
argument "name2" is missing, with no default
如何解决这个问题
MergePalette <- function(name,name2){
pal <- RanglaPunjab(name)
if (is.null(name2)){
stop("Enter 2 valid palettes. Run ListPalette() for list of palettes.")
}
pal2 <- RanglaPunjab(name2)
new_pal <-unique(c(pal,pal2))
new_pal
}
两种方法:
首选:检查缺失:
MergePalette <- function(name,name2){
if (missing(name2)) { stop(...) }
在formals中定义一个默认值NULL
,函数生效:
MergePalette <- function(name,name2=NULL){
if (is.null(name2)) { stop(...) }
如果用户(不小心)向 name2
提供了一个本身就是 NULL
的参数,则错误消息会令人困惑。正如@Moody_Mudskipper 指出的那样,通过将默认值设置为NULL
,您隐含地告诉用户此参数是可选的and/or NULL
是可以的。有了这个,我建议这个选项不适合这个 question/use.
问题结尾是脚本(加上 github). The GitHub repo is here 并且可以用
安装install.packages("devtools")
devtools::install_github("ArtieLadie/RanglaPunjab")
MergePalette(name,name2)
有两个名字。如果 person 只传递一个名字,我希望执行下面的函数然后退出函数,
Enter 2 valid palettes. Run ListPalette() for list of palettes.
不幸的是,当我执行 MergePalette("Teej")
时,我得到
Error in MergePalette("Teej") :
argument "name2" is missing, with no default
如何解决这个问题
MergePalette <- function(name,name2){
pal <- RanglaPunjab(name)
if (is.null(name2)){
stop("Enter 2 valid palettes. Run ListPalette() for list of palettes.")
}
pal2 <- RanglaPunjab(name2)
new_pal <-unique(c(pal,pal2))
new_pal
}
两种方法:
首选:检查缺失:
MergePalette <- function(name,name2){ if (missing(name2)) { stop(...) }
在formals中定义一个默认值
NULL
,函数生效:MergePalette <- function(name,name2=NULL){ if (is.null(name2)) { stop(...) }
如果用户(不小心)向
name2
提供了一个本身就是NULL
的参数,则错误消息会令人困惑。正如@Moody_Mudskipper 指出的那样,通过将默认值设置为NULL
,您隐含地告诉用户此参数是可选的and/orNULL
是可以的。有了这个,我建议这个选项不适合这个 question/use.