본문 바로가기

Rcpp에서 R내장 함수를 불러와서 써도 빠를까?

R Programming/Rcpp by Mandarim_ 2024. 1. 8.

 

속도 문제르 R코드를 Rcpp로 옮기면서 가장 많이 했던 고민은 이거다.

 

R에서 이미 구현되어 있는 내장함수를 Cpp로 새로 구현하였을 때, 그 함수가 이미 구현되어 있는 R함수보다 안정적이게 작성하기란 어렵다.... (특히, Optimize 함수 같은 거..)

Rcpp에선 R의 특정 패키지에 구현되어 있는 함수를 불러와서 쓸 수 있는 기능이 있어 그 기능을 애용하게 되었다.


R내장함수 Rcpp에서 불러오기: Optimize 예시

2023.09.17 - [R Programming/Rcpp] - [Rcpp] Rcpp에서 R함수 사용하기 (Optimize 함수 예시)

 

[Rcpp] Rcpp에서 R함수 사용하기 (Optimize 함수 예시)

(현재 코드는 RcppArmadillo & Rcpp 을 사용하였다.) Rcpp은 R의 계산속도 향상을 위해 사용하지만, C++ 내부에 당연히 R의 패키지들은 다 구현되어 있지 않다... R을 사용하다 속도 문제로 R코드를 C++로 수

hyemstat.tistory.com


 

하지만, 작성하면서도 고민되었던 점은 속도 문제로 Rcpp로 옮겨왔는데, Rcpp 자체에서 R 내장함수를 불러와서 작동시키면 오히려 속도가 더 오래 걸리는 게 아닐까였다.

 

그래서 nlm과 optimize 두 함수를 이용하여 직접 평가해 보기로 했다.

속도 평가할 땐 microbenchmark 패키지를 사용하였다.

R에서 작동한 nlm, optimize, 그리고 Rcpp에서 불러온 nlm, optimize 총 4가지의 함수를 비교하였다.

이때, 최적화하고자 하는 함수(I_pll)는 R과 Rcpp에서 각각 정의하여 사용하였다.

 

R, Rcpp 속도비교 결과에 대한 사진
R과 Rcpp에서 nlm, optimize 함수의 속도 비교

 

고민했던 바와 다르게, Rcpp에서 R내장함수를 불러와서 사용해도 R보다 Rcpp의 속도가 훨씬 빠르다.

반응형