问题描述
作为我正在从事的项目的一部分,我希望允许用户返回嵌套对象结构的各种输入的摘要。这些对象的一部分用作容器或格式化程序,而其余部分则用于解析其他输入。
基本上,摘要将格式化“名称”,“函数类型/名称”和其他一些描述符。但是我在第二部分“功能类型/名称”上迷了一下。
我解决该问题的一些想法是替换输入(假设它不丢失)并检查输入是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"
以最简单的格式,我正在搜索要返回"named function"
和"unnamed function"
搜索已加载的命名空间的函数。例如。 sum
和sum(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"