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.
Создано в 2018-05-30 с помощью пакета prex (v0.2.0).