R: Правильный способ проверки, была ли функция передана в качестве аргумента другой функции - PullRequest
1 голос
/ 16 января 2020

В настоящее время я модифицирую функцию, которая использует предоставленную пользователем функцию в качестве одного из своих входов. Я попытался использовать «is.na», чтобы увидеть, предоставляется ли функция, и пока она работает - в настоящее время она также выдает предупреждение. Есть ли лучший способ проверить, существует ли этот аргумент?

 example <- function(num1, num2, functionName = NA) {

  if (is.na(functionName)) {

    return(list(num1, num2))

  } else {

    value <- functionName(num1, num2)
    return(value)

  }
}

> example(1,3)
[[1]]
[1] 1

[[2]]
[1] 3

> example(1,3, sum)
[1] 4
Warning message:
In is.na(functionName) :
  is.na() applied to non-(list or vector) of type 'builtin'

1 Ответ

2 голосов
/ 16 января 2020

Если вы можете передать имя функции в виде строки, мы можем использовать match.fun

example <- function(num1, num2, functionName = NA) {
   if (is.na(functionName)) {
     return(list(num1, num2))
   } else {
     value <- match.fun(functionName)(num1, num2)
     return(value)
   }
}

example(1, 3)

#[[1]]
#[1] 1

#[[2]]
#[1] 3

example(1,3, "sum")
#[1] 4

example(2,3, "*")
#[1] 6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...