适用于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)
}
答案 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。