【问题标题】:R Function Doesn't Throw Error As ExpectedR 函数不会按预期抛出错误
【发布时间】:2018-11-09 21:10:43
【问题描述】:

问题的结尾是脚本(加上github)。 GitHub repo 是here,可以安装

install.packages("devtools")
devtools::install_github("ArtieLadie/RanglaPunjab")

MergePalette(name,name2) 有两个名字。如果人只传递一个名字,我希望执行以下然后退出函数,

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
}

【问题讨论】:

  • 最好把函数的代码直接贴在这里
  • 回购链接已损坏。您希望抛出错误的代码是什么?
  • 我假设github.com/ArtieLadie/RanglaPunjab,所以相应地编辑了问题。
  • @Moody_Mudskipper 天哪,我完全忘记了。现在我发布了代码。
  • @CalumYou 哦,好的,我在原始消息上发布了指向code 的链接

标签: r exception-handling


【解决方案1】:

两种方法:

  1. 首选:检查缺失:

    MergePalette <- function(name,name2){
      if (missing(name2)) { stop(...) }
    
  2. 在forms中定义一个默认值NULL,函数就起作用了:

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

    如果用户(不小心)向name2 提供了一个本身就是NULL 的参数,则错误消息将令人困惑。正如@Moody_Mudskipper 所指出的,通过将默认值设置为NULL,您隐含地告诉用户此参数是可选的和/或NULL 是可以的。有了这个,我建议这个选项不适合这个问题/用途。

【讨论】:

  • 如果用户输入 NULL,我认为“输入 2 个有效调色板”不会是一个令人困惑的消息。你有其他理由说missing 是首选吗?我感觉它经常在基础 R 中使用,但大多数时候在重要包中避免使用默认 = NULL
  • 相关:stackoverflow.com/questions/22024082/…。我相信在这种情况下使用missing是合适的,因为给argumenr一个会使函数返回错误的默认值感觉是错误的。但是在其他情况下,将 NULL 设置为默认值会明确告诉用户可以跳过此参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-21
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 2021-05-04
相关资源
最近更新 更多