R函数不会按预期引发错误

时间:2018-05-30 22:58:31

标签: r exception-handling

问题的结尾是脚本(加上github)。 GitHub仓库为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
}

1 个答案:

答案 0 :(得分:2)

两种方法:

  1. 首选:检查遗漏:

    MergePalette <- function(name,name2){
      if (missing(name2)) { stop(...) }
    
  2. 在形式中定义默认值NULL,函数有效:

    MergePalette <- function(name,name2=NULL){
      if (is.null(name2)) { stop(...) }
    

    如果用户(意外地)向name2提供了一个自身为NULL的参数,则错误消息将会引起混淆。正如@Moody_Mudskipper所指出的那样,通过将默认值设置为NULL,您隐式告诉用户该参数是可选的和/或NULL是可以的。有了这个,我建议这个选项不适合这个问题/用途。