输入错误时,函数不会引发错误

时间:2018-05-30 18:33:42

标签: r string compare

以下是GitHub script中的repo

适用于ListPalette()ListPalette("PunjabiPalette")

如果我传入的值不正确,而不是显示错误并终止该功能,它会继续显示调色板。

我还尝试了listname != "PunjabiPalette"!identical(listname,"PunjabiPalette")

如果参数不正确,我怎样才能正确显示错误?

ListPalette <- function(listname){

  if (is.null(names(args))){
    listname <- "PunjabiPalette"
  }
  else if (!(args  %in% "PunjabiPalette")){
    stop(paste0(listname, " does not exist."))
  }

  list <- get(listname)
  names(list)
}

1 个答案:

答案 0 :(得分:2)

args()是一个默认函数,可以获取已定义函数的参数,它不允许您访问函数定义中的参数。所以你的方法是行不通的。

您的第一个if语句不是必需的,您可以在R中指定默认参数,方法是在函数定义中包含=。要停止无效输入,使用listname != "PunjabiPalette"对我来说没问题,如下所示。该函数在非"PunjabiPalette"的输入上正确错误。我还假设您已将其定义为全局环境中的列表,并使用get。我不推荐这种做法(尝试列出清单),但这应该有希望暂时有用。

PunjabiPalette <- list("a" = 1, "b" = 2) # example list with named elements
ListPalette <- function(listname = "PunjabiPalette"){

  if (listname != "PunjabiPalette"){
    stop(paste0(listname, " does not exist."))
  }

  list <- get(listname)
  names(list)
}

print(ListPalette()) # works with missing argument
#> [1] "a" "b"
print(ListPalette("PunjabiPalette")) # works with valid argument
#> [1] "a" "b"
print(ListPalette("OtherName")) # fails with incorrect argument
#> Error in ListPalette("OtherName"): OtherName does not exist.

reprex package(v0.2.0)创建于2018-05-30。