Простой вызов функции в R - PullRequest
1 голос
/ 06 мая 2020

Есть ли способ сделать что-то подобное в R?

doSomething <- function(a){

  value <- NULL
  if(a > 0){
     value <- a
  }

   return(value)
}


doSomething(-5) | "no value"

Я просто придумываю это, но мне было любопытно узнать, можно ли сделать что-то подобное или подобное с помощью R вместо использования ifelse/switch/case_when?

Ответы [ 3 ]

2 голосов
/ 06 мая 2020

Для этого нет встроенного синтаксиса, но вы можете написать свой собственный. Например, для внутреннего использования knitr используется

`%n%` = function(x, y) if (is.null(x)) y else x

, а затем ваш пример становится

doSomething <- function(a){

  value <- NULL
  if(a > 0){
    value <- a
  }

  return(value)
}

`%n%` <- function(x, y) if (is.null(x)) y else x

doSomething(-5) %n% "no value"
#> [1] "no value"

Создано 06.05.2020 с помощью пакета реплекс (v0.3.0)

Однако будьте осторожны: в R есть много разных способов не иметь значения: что-то может отсутствовать, или NA, или NaN, а также NULL.

0 голосов
/ 06 мая 2020

Я запуталась. Вы хотите это сделать?

doSomething <- function(a){

  value <- "no value"
  if(a > 0){
    value <- a
  }

  return(value)
}

doSomething(-5)
#> [1] "no value"
doSomething(5)
#> [1] 5

Создано 06.05.2020 пакетом REPEX (v0.3.0)

0 голосов
/ 06 мая 2020

Не совсем.

NULL - это список. Для doSomething аргумент a - это число c.

doSomething(3) | "no value"

будет ИЛИ числом с символом, который не определен. Вы можете делать такие вещи в Perl, но это скорее ошибка, чем функция.

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