sys.call(0)Bir çağrı nesnesi çıktısının uygun olup olmadığını deneyin veya sadece karakter dizesi olarak ad istiyorsanız bunu kullanın. Aşağıda bunun birkaç testi var. sys.call hem adı hem de bağımsız değişkenleri döndürür ve [[1]] yalnızca adı seçer.
my_fun <- function() deparse(sys.call(0)[[1]])
g <- function() my_fun()
my_fun()
## [1] "my_fun"
g()
## [1] "my_fun"
İşlev adları
İşlevlerin aslında adları olmadığını unutmayın. İşlev adları olarak gördüğümüz şey aslında sadece işlevi tutan ve işlevin kendisinin bir parçası olmayan değişkenlerdir. Bir işlev argümanlardan, bedenden ve bir çevreden oluşur - bu bileşenler arasında işlev adı yoktur.
Anonim işlevler
Ayrıca, isimsiz işlevler olabilir ve bunlar yukarıda kullanıldığında garip sonuçlar verebilir.
sapply(1:3, function(x) deparse(sys.call(0)[[1]]))
## [1] "FUN" "FUN" "FUN"
Edge kutuları
Özellikle anonim işlevler içeren bazı durumlar vardır, burada deparsebirden fazla eleman döndürülür , bu nedenle bu gibi uç durumları kapsamak istiyorsanız, ayrılmak veya kalkış (...) [[1]] veya @Konrad Rudolph tarafından R 4.0.0'da deparse1 kullanılarak belirtilmiştir.
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]])"
Diğer
Hatırlayın . İşlev adının nedenini işlevi yinelemeli olarak çağırmaksa Recall()bunun yerine kullanın. Yardım dosyasından:
fib <- function(n)
if(n<=2) { if(n>=0) 1 else 0 } else Recall(n-1) + Recall(n-2)
fib(4)
## [1] 3
uyarı ve durdurma Her ikisi de kendisine iletilen argümanla birlikte işlevin adını verir, böylece geçerli işlev adını almanıza gerek kalmaz.
testWarning <- function() warning("X")
testWarning()
## Warning message:
## In testWarning() : X