识别命名函数是否作为函数参数提供

Identifying whether a named function was supplied as function argument

作为我一直从事的项目的一部分,我希望允许用户return 对嵌套对象结构的各种输入进行总结。一部分对象用作容器或格式化程序,而其余部分用于解析其他输入。

基本上,摘要会格式化 'name'、'function type/name' 和其他一些描述符。但是我在第二部分 'function type/name'.

上有点迷糊了

How would one identify whether a named function or lambda-like (unnamed) function was provided as argument to a function?

我有几个解决问题的想法是替换输入(假设它没有丢失)并检查输入是 name 还是 call

f <- function(x)
  substitute(x)
class(f(sum))
[1] "name"
class(f(function(x) x**2))
[1] "call"

但这不完整,因为函数 call 仍可被视为命名

f(sum(x))
[1] "call"

在最简单的格式中,我会搜索 return "named function""unnamed function" 搜索已加载名称空间的函数。例如。 sumsum(x) 是命名函数,而 function(x) x**2 是未命名函数。

如果我对问题的理解正确,也许下面的内容可以让我知道该怎么做。

f <- function(x){
  flag <- is.function(x)
  y <- as.character(substitute(x))[1]
  if(flag){
    i <- grepl("function", y) + 1L
    c("named function", "unnamed function")[i]
  } else {
    #msg <- paste(sQuote(y), "is not a function.")
    #message(msg)
    flag
  }
}

f(sum)
#[1] "named function"
f(sum(x))
#[1] FALSE
f(function(x) x**2)
#[1] "unnamed function"