[R] R 패키지 함수의 소스 코드를 볼 수 있는 방법 (how to see function's source codes in R package)
R 분석과 프로그래밍/R 데이터 전처리 2019. 10. 22. 22:01R의 다양한 패키지들을 사용하다 보면 함수를 사용한 후의 산출물 결과가 자신이 생각했던 결과와 다를 경우 R 패키지 함수의 소스 코드가 어떻게 되어있는 것인지 궁금할 때가 있습니다.
이번 포스팅에서는 R 패키지에 있는 함수, 메소드의 소스 코드를 들여다볼 수 있는 2가지 방법을 소개하겠습니다.
(1) getAnywhere(function_name)
(2) package_name:::function_name
가령, 두 벡터의 차집합(difference of sets)을 구할 때 사용하는 함수가 base 패키지의 setdiff() 함수입니다.
> x <- c(1, 1, 2, 3, 4, 5) > y <- c(4, 5, 6, 7) > setdiff(x, y) [1] 1 2 3 |
위에서 예로 든 base 패키지의 setdiff() 함수에 대한 소스 코드를 위의 2가지 방법을 사용해서 살펴보겠습니다.
(1) getAnywhere(function_name) |
R package 의 이름을 몰라도 함수, 메소드의 이름만 알고 있으면 R package 이름과 namespace, 그리고 소스 코드를 친절하게 다 볼 수 있으므로 매우 편리합니다.
> getAnywhere(setdiff) A single object matching ‘setdiff’ was found It was found in the following places package:base namespace:base with value function (x, y) { x <- as.vector(x) y <- as.vector(y) unique(if (length(x) || length(y)) x[match(x, y, 0L) == 0L] else x) } <bytecode: 0x000000000ff1e8d0> <environment: namespace:base> >
|
(2) R_package_name:::function_name |
R package 이름을 알고 있다면 package_name:::function_name 의 형식으로 ':::' 를 사용해서 함수의 소스 코드를 들여다볼 수 있습니다. 위 (1)번의 getAnywhere() 함수가 기억이 잘 안날 때 쉽게 ':::' 를 사용해서 소스 코드 볼 때 편리합니다.
> base:::setdiff function (x, y) { x <- as.vector(x) y <- as.vector(y) unique(if (length(x) || length(y)) x[match(x, y, 0L) == 0L] else x) } <bytecode: 0x000000000ff1e8d0> <environment: namespace:base> |
많은 도움이 되었기를 바랍니다.
이번 포스팅이 도움이 되었다면 아래의 '공감~'를 꾹 눌러주세요. :-)