gpt4 book ai didi

R:找到作为参数传递的函数的原始名称

转载 作者:行者123 更新时间:2023-12-04 12:05:23 25 4
gpt4 key购买 nike

我有函数 f1f2 将函数作为参数,例如:

f1 <- function(FUN) {
...
}


f2 <- function(FUN) {
f1(FUN=FUN)
}

从函数 f1 中,我需要找回传递给 f2 的函数的原始名称,例如 "myFunc",但是不是 "FUN"

基本上我们可以想象一个函数 f1 以便 f2(f1(mean)) 返回 “mean”?如果 FUN 是匿名的,我们可以返回 NULLNA

在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com