在R中,我需要一个作为参数传递给嵌套函数的函数的名称。获取作为参数传递给R中嵌套函数的函数的名称
> fun1 <- function(f) deparse(substitute(f))
> fun2 <- function(f) fun1(f)
> fun1(mean)
[1] "mean"
> fun2(mean)
[1] "f"
>
如何获取独立于作为嵌套函数参数传递次数的函数名称?
在R中,我需要一个作为参数传递给嵌套函数的函数的名称。获取作为参数传递给R中嵌套函数的函数的名称
> fun1 <- function(f) deparse(substitute(f))
> fun2 <- function(f) fun1(f)
> fun1(mean)
[1] "mean"
> fun2(mean)
[1] "f"
>
如何获取独立于作为嵌套函数参数传递次数的函数名称?
这确实是堆栈上的第一帧替代:
fun3 <- function() fun2(mean)
fun3()
#[1] "f"
:
fun1 <- function(f) deparse(substitute(f, sys.frame(1)))
fun2 <- function(f) fun1(f)
fun1(mean)
#[1] "mean"
fun2(mean)
#[1] "mean"
显然,如果你不通过从最外层函数的参数,这将失败如果也将失败,如果更改参数名:
fun2 <- function(g) fun1(g)
fun2(mean)
#[1] "f"
但是,它可能作为s对你的用例来说很有效(你没有描述过)。
如果这些限制是一个问题,我们需要一些更复杂和低效:
fun1 <- function(f) {
fr <- rev(sys.frames())
f <- substitute(f, fr[[1]])
#loop over the frame stack
for (i in seq_along(fr)[-1]) {
f <- eval(bquote(substitute(.(f), fr[[i]])))
}
deparse(f)
}
fun2 <- function(g) fun1(g)
fun3 <- function() fun2(mean)
fun1(mean)
#[1] "mean"
fun2(mean)
#[1] "mean"
fun3()
#[1] "mean"
当然,这仍然会在边缘的情况下突破:
fun4 <- function(mean) fun3()
fun4(2)
#[1] "2"
你可以尝试处理它们,但我会在这里停下来。
并非所有函数都有名称。 'fun1(function(x)x)'会返回什么?说出你希望以更大规模而不是这个特定的技术细节来完成,可能会更好。在R中可能有更好的方法安全可靠地完成工作。 – MrFlick