Передача условия if в качестве аргумента функции - ошибка неиспользуемых аргументов - PullRequest
1 голос
/ 04 июля 2019

Я не понимаю, как избежать ошибки «неиспользуемые аргументы» при определении функций, подобных приведенной ниже.

Я использую RStudio версии 1.2.1335.

condition = function(cond)
{
  ifelse (cond == 0, value = 1, value = -1)

  return(value)
}

Когда я пытаюсь запустить функцию, например, условие (0), я получаю следующее сообщение об ошибке:

Ошибка в ifelse (cond == 0, значение = 1, значение = -1): неиспользованные аргументы (значение = 1, значение = -1)

Как я могу устранить эту ошибку?

Ответы [ 2 ]

2 голосов
/ 04 июля 2019

ifelse используется

ifelse (тест, да, нет)

Здесь «да» и «нет» не нужноназначение внутри.Если есть какое-либо присваивание, оно должно быть за пределами функции ifelse

value <- ifelse(cond == 0, 1, -1)

В функции OP оно также не нуждается ни в каком присваивании, а затем в оператор return, как мы можемпредоставить единственное утверждение

condition <- function(cond) ifelse(cond == 0, 1, -1) 

Кроме того, ifelse можно заменить арифметическим способом для замены значений

condition <- function(cond) c(-1, 1)[(!cond) + 1]
1 голос
/ 04 июля 2019

Вот, пожалуйста:

condition = function(cond)
{
  ifelse (cond == 0, value <- 1, value <- -1)

  return(value)
}

Тест:

> condition(0)
[1] 1
> condition(1)
[1] -1

Вы можете присвоить значения value, используя оператор <-. В противном случае R считает, что вы передаете аргумент ifelse, и вы получите сообщение об ошибке, поскольку для ifelse нет аргумента value:

> args(ifelse)
function (test, yes, no) 
NULL

Редактировать

Будьте осторожны, я бы не советовал вам делать это таким образом, если вы не понимаете, как и почему это работает. Самое безопасное решение - правильно использовать ifelse, как указано akrun .

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