Versuchen Sie, sys.call(0)
ob die Ausgabe eines Aufrufobjekts in Ordnung ist, oder versuchen Sie es, wenn Sie den Namen nur als Zeichenfolge verwenden möchten. Im Folgenden finden Sie einige Tests dazu. sys.call gibt sowohl den Namen als auch die Argumente zurück und [[1]] wählt nur den Namen aus.
my_fun <- function() deparse(sys.call(0)[[1]])
g <- function() my_fun()
my_fun()
## [1] "my_fun"
g()
## [1] "my_fun"
Funktionsnamen
Beachten Sie, dass Funktionen eigentlich keine Namen haben. Was wir als Funktionsnamen betrachten, sind eigentlich nur Variablen, die die Funktion enthalten und nicht Teil der Funktion selbst sind. Eine Funktion besteht aus Argumenten, Text und einer Umgebung - unter diesen Bestandteilen gibt es keinen Funktionsnamen.
Anonyme Funktionen
Darüber hinaus kann man anonyme Funktionen haben und diese können seltsame Ergebnisse liefern, wenn sie mit den oben genannten verwendet werden.
sapply(1:3, function(x) deparse(sys.call(0)[[1]]))
## [1] "FUN" "FUN" "FUN"
Randfälle
Es gibt einige Situationen, insbesondere bei anonymen Funktionen, in denen deparse
mehr als ein Element zurückgegeben wird. Wenn Sie also solche Randfälle abdecken möchten, verwenden Sie das Argument nlines = 1, um deparse (...) [[1]] oder as zu deparieren Erwähnt von @Konrad Rudolph unter Verwendung von deparse1 in 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]])"
Andere
Rückruf . Wenn der Grund dafür ist, dass der Funktionsname rekursiv aufgerufen wird, verwenden Sie Recall()
stattdessen. Aus der Hilfedatei:
fib <- function(n)
if(n<=2) { if(n>=0) 1 else 0 } else Recall(n-1) + Recall(n-2)
fib(4)
## [1] 3
Warnung und Stopp Beide geben den Namen der Funktion zusammen mit dem an sie übergebenen Argument aus, sodass der aktuelle Funktionsname nicht abgerufen werden muss.
testWarning <- function() warning("X")
testWarning()
## Warning message:
## In testWarning() : X