Функция не вызывает ошибку при неправильном вводе - PullRequest
0 голосов
/ 30 мая 2018

Вот мой скрипт в GitHub репо .

Он работает с 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 голосов
/ 30 мая 2018

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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...