识别命名函数是否作为函数参数提供
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"
搜索已加载名称空间的函数。例如。 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"
作为我一直从事的项目的一部分,我希望允许用户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"
搜索已加载名称空间的函数。例如。 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"