2012-11-16 8 views
3

다음 질문에 대한 간단한 질문이 있습니다.C와 R 사이의 상호 작용

1) C에서 R을 호출하려면 C 코드를 작성해야합니다. 하지만 때로는 R로 직접 작성된 함수를 호출해야하는데 C 함수에서 그 함수를 호출 할 수 있습니까?

2) 만약 1)이 가능하다면, 루프로 1000 번 반복적으로 R로 작성된 함수를 사용하면 C를 사용하여이 함수를 호출하여 루프를 수행하는 속도가 빨라 집니까?

답변

5

질문을 던지십시오. 빠른 테이크 :

  1. 예. 가능합니다. R이 제공하는 C 기반 API로는 약간의 지루함이 있습니다. (최소한 우리 의견으로는) C++ 레이어를 사용하면 훨씬 쉽게 처리 할 수 ​​있습니다. Rcpp

  2. 중요한 포인트입니다. R 코드가 병목 지점 인 경우 C 또는 C++에서 호출 할 때 병목 현상이 계속 발생합니다. 은 어디에서 호출 되든 상관 없습니다. 중요한 것은 상대 속도입니다.

rcpp-devel 목록 (링크는 Rcpp page)에는 많은 관련 토론이 있습니다. 당신은 또한 [rcpp] 태그 아래에 그래서 여기에 많이 찾을 수 있습니다.

+0

기본적으로 사람들은 속도를 얻길 원한다면 R 함수를 R에서 호출 할 C 함수로 호출하지 않을 것입니다. 이제 여기에 다음 질문이 있습니다. C에서 행렬 연산을 지루하고 지루합니까? C에서 빠를 것인가? –

+0

내가 대체로 제안하는 것은 대체하기가 어렵거나 지루한 하나 또는 소수의 R 함수를 호출하는 것입니다. 계산의 "핵심"부분을 C++ 코어로 바꾸는 데 집중해야합니다. Rcpp는이 접근법을 매우 쉽게 만들어 주며, 우리는 정말 좋은 속도를 얻었습니다. –

+0

예 및 예 : 지루하고 빠릅니다. RcppArmadillo를 살펴보십시오. 사용하기 쉽고 문서화가 잘되어 있으며 여전히 빠릅니다 *. 나는 구글이 당신을 위해 찾아야 할 많은 블로그 게시물과 예제를 가지고있다. –