R:检查一个函数是否作为参数提供给另一个函数的正确方法

R:检查一个函数是否作为参数提供给另一个函数的正确方法,r,function,warnings,R,Function,Warnings,我目前正在修改一个函数,该函数使用用户提供的函数作为其输入之一。我尝试使用“is.na”来查看是否提供了一个函数,当它工作时,它当前也会产生一个警告。有没有更好的方法来检查这个论点是否存在 example <- function(num1, num2, functionName = NA) { if (is.na(functionName)) { return(list(num1, num2)) } else { value <- functionN

我目前正在修改一个函数,该函数使用用户提供的函数作为其输入之一。我尝试使用“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,3,总和)
[1] 4
警告信息:
在is.na(函数名)中:
.na()是否应用于“内置”类型的非-(列表或向量)

如果您可以将函数名作为字符串传递,我们可以使用
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

example match.fun似乎正是为了这个目的而创建的,而且很有效。另一个用户评论(并删除)的是尝试使用NULL和is.NULL,这同样有效。仅供那些偶然发现这个问题的人参考!