Tente sys.call(0)
se a saída de um objeto de chamada está ok ou remova-a se você quiser apenas o nome como uma sequência de caracteres. Abaixo estão alguns testes disso. sys.call retorna o nome e os argumentos e o [[1]] seleciona apenas o nome.
my_fun <- function() deparse(sys.call(0)[[1]])
g <- function() my_fun()
my_fun()
## [1] "my_fun"
g()
## [1] "my_fun"
Nomes de funções
Observe que as funções não têm nomes. O que consideramos nomes de funções são na verdade apenas variáveis que mantêm a função e não fazem parte da própria função. Uma função consiste em argumentos, corpo e ambiente - não há nome de função entre esses constituintes.
Funções anônimas
Além disso, pode-se ter funções anônimas e elas podem retornar resultados estranhos quando usadas com as opções acima.
sapply(1:3, function(x) deparse(sys.call(0)[[1]]))
## [1] "FUN" "FUN" "FUN"
Casos de borda
Existem algumas situações, particularmente envolvendo funções anônimas, em deparse
que retornará mais de um elemento; portanto, se você quiser cobrir esses casos de borda, use o argumento nlines = 1 para separar ou use deparse (...) [[1]] ou como mencionado por @Konrad Rudolph usando deparse1 no R 4.0.0.
Map(function(x) deparse(sys.call(0)[[1]], nlines = 1), 1:2)
## [[1]]
## [1] "function (x) "
##
## [[2]]
## [1] "function (x) "
Map(function(x) deparse(sys.call(0)[[1]]), 1:2) # without nlines=1
## [[1]]
## [1] "function (x) " "deparse(sys.call(0)[[1]])"
##
## [[2]]
## [1] "function (x) " "deparse(sys.call(0)[[1]])"
De outros
Lembre-se . Se o motivo pelo qual você deseja que o nome da função seja chamar recursivamente a função, use-o Recall()
. No arquivo de ajuda:
fib <- function(n)
if(n<=2) { if(n>=0) 1 else 0 } else Recall(n-1) + Recall(n-2)
fib(4)
## [1] 3
aviso e parada Ambos emitem o nome da função, juntamente com qualquer argumento que lhes seja passado, para que não seja necessário obter o nome atual da função.
testWarning <- function() warning("X")
testWarning()
## Warning message:
## In testWarning() : X