我有函数 f1
和 f2
将函数作为参数,例如:
f1 <- function(FUN) {
...
}
f2 <- function(FUN) {
f1(FUN=FUN)
}
从函数
f1
内部,我需要找回传递给 f2
的函数的原始名称,例如 "myFunc"
,但不是 "FUN"
。基本上我们可以想象一个函数
f1
以便 f2(f1(mean))
返回 "mean"
吗?如果 FUN
是匿名的,我们可以例如返回 NULL
或 NA
。在 R 中是否有一种简单/标准的方法来做到这一点?我尝试使用手动搜索相同的函数代码(但它不是很干净,我正在寻找更好的解决方案)
fn = unlist(as.list(lsf.str(envir=.GlobalEnv)))
for (f in fn) {
if (setequal(paste(body(myFunc)),paste(body(f)))) {
return(f)
}
}
最佳答案
您也可以使用 lazyeval
包:
f1 <- function(FUN) {
lazyeval::expr_text(FUN)
}
f2 <- function(FUN) {
f1(FUN = FUN)
}
f2(f2(f2(mean)))
[1] "f2(f2(mean))"
这对我有用:
f1 <- function(FUN) {
eval(quote(substitute(FUN)), envir = parent.frame())
}
f2 <- function(FUN) {
f1(FUN=FUN)
}
f2(mean)
在这种情况下,
f1
在 f2 环境中评估 substitute(FUN)
调用。查看这些结果:
> f2(mean)
mean
> f2(function(x) {NULL})
function(x) {
NULL
}
如果希望输出为字符串,则需要使用
deparse
,然后可以定义 f1 :f1 <- function(FUN) {
eval(quote(deparse(substitute(FUN))), envir = parent.frame())
}
关于R:查找作为参数传递的函数的原始名称,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29911116/