Как использовать tryCatch без глобальных переменных или суперпоставки - PullRequest
0 голосов
/ 20 февраля 2019

Я пишу пакет R с циклом tryCatch() следующей формы, в которой я сначала пытаюсь подобрать модель, используя подверженный ошибкам метод, но затем использую более безопасный метод, если первый не удается:

# this function adds 2 to x
safe_function = function(x) {

  tryCatch( {
    # try to add 2 to x in a stupid way that breaks
    new.value = x + "2"

  }, error = function(err) {
           message("Initial attempt failed. Trying another method.")
           # needs to be superassignment because inside fn
           assign( x = "new.value",
                  value = x + 2,
                  envir=globalenv() )
         } )

  return(new.value)
}

safe_function(2)

Этот пример работает как задумано.Однако использование assign вызывает проверку при проверке пакета на готовность к CRAN:

Found the following assignments to the global environment

Аналогичная проблема возникает, если я заменю assign на <<-.Что я могу сделать?

1 Ответ

0 голосов
/ 20 февраля 2019

Я не уверен, почему вы пытаетесь использовать глобальную область видимости здесь.Вы можете просто вернуть значение из try/catch.

safe_function = function(x) {

  new.value <-   tryCatch( {
    # try to add 2 to x in a stupid way that breaks
    x + "2"
  }, error = function(err) {
    message("Initial attempt failed. Trying another method.")
    x + 2
  } )

  return(new.value)
}
...