在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