0

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

基本上,摘要将格式化“名称”、“函数类型/名称”和其他一些描述符。但我在第二部分“函数类型/名称”上有些意外。

如何确定是一个命名函数还是类似 lambda(未命名)的函数作为参数提供给函数?

我解决问题的一些想法是替换输入(假设它没有丢失)并检查输入是否namecall

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

但这是不完整的,因为一个函数call仍然可以被认为是一个命名的

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

在最简单的格式中,我将搜索要返回的函数"named function""unnamed function"搜索已加载的命名空间。例如。sumandsum(x)是一个命名函数,whilefunction(x) x**2是一个未命名函数。

4

1 回答 1

1

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

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"
于 2020-10-05T19:21:47.017 回答