시도 sys.call(0)
호출 객체 출력이 그냥 문자열로 이름을 원한다면 것을 확인 또는 deparse 경우. 다음은이 테스트에 대한 몇 가지 테스트입니다. sys.call은 이름과 인수를 모두 반환하며 [[1]]은 이름 만 선택합니다.
my_fun <- function() deparse(sys.call(0)[[1]])
g <- function() my_fun()
my_fun()
## [1] "my_fun"
g()
## [1] "my_fun"
기능 이름
함수에는 실제로 이름이 없습니다. 함수 이름으로 간주하는 것은 실제로 함수를 보유하고 함수 자체의 일부가 아닌 변수입니다. 함수는 인수, 본문 및 환경으로 구성됩니다. 이러한 구성 요소에는 함수 이름이 없습니다.
익명 함수
또한 익명의 기능을 가질 수 있으며 위와 함께 사용하면 이상한 결과를 반환 할 수 있습니다.
sapply(1:3, function(x) deparse(sys.call(0)[[1]]))
## [1] "FUN" "FUN" "FUN"
가장자리 케이스
특히 익명 함수와 관련하여 deparse
여러 요소를 반환 하는 일부 상황이 있으므로 이러한 에지 사례를 다루려면 nlines = 1 인수를 사용하여 deparse (...) [[1]] 또는 R 4.0.0에서 deparse1을 사용하여 @Konrad Rudolph가 언급했습니다.
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]])"
다른
기억하십시오 . 함수 이름을 원하는 이유가 재귀 적으로 함수를 호출하는 것이라면 Recall()
대신 사용하십시오. 도움말 파일에서 :
fib <- function(n)
if(n<=2) { if(n>=0) 1 else 0 } else Recall(n-1) + Recall(n-2)
fib(4)
## [1] 3
warning and stop 이들은 둘 다 전달 된 인수와 함께 함수 이름을 발행하므로 현재 함수 이름을 얻을 필요가 없습니다.
testWarning <- function() warning("X")
testWarning()
## Warning message:
## In testWarning() : X