2011-03-14 5 views
3

내가 inlineRcpp 웹 페이지에서 간단한 Rcpp example를 컴파일하려고 :Rcpp 컴파일 오류

Rcpp::NumericVector orig(vector);     
Rcpp::NumericVector vec(orig.size());   
std::transform(orig.begin(),orig.end(),vec.begin(),sqrt); 

return Rcpp::List::create(Rcpp::Named("result")=vec,Rcpp::Named("original") =orig); 

그러나 나는 다음과 같은 오류 얻을 :

no matching function for call to 'transform(Rcpp::traits::storage_type<14>::type*, Rcpp::traits::storage_type<14>::type*, Rcpp::traits::storage_type<14>::type*, <unresolved overloaded function type>) 

내가 Rtools로 윈도우 XP를 사용하고 (다른 STL이없는 예제가 작동합니다!), R 2.12.0.

답변

6

아.

std::transform(orig.begin(),orig.end(),vec.begin(),::sqrt); 

있는이 여기서 일하는 :

R> require(inline) 
R> src <- ' 
+  Rcpp::NumericVector orig(vector); 
+  Rcpp::NumericVector vec(orig.size()); 
+  std::transform(orig.begin(), orig.end(), vec.begin(), ::sqrt); 
+  return Rcpp::List::create(Rcpp::Named("result") = vec, 
+        Rcpp::Named("original") = orig); 
+ ' 
R> fun <- cxxfunction(signature(vector="numeric"), src, plugin="Rcpp") 
R> fun(1:9) 
$result 
[1] 1.00000 1.41421 1.73205 2.00000 2.23607 2.44949 2.64575 2.82843 3.00000 

$original 
[1] 1 2 3 4 5 6 7 8 9 

R> 
명시 적으로 글로벌 C에서 심볼 C.에서 수입 ++ 네임 스페이스를 참조 그래서 그 대신이 줄을 시도 할 필요가 있으므로 sqrt() 이제 Rcpp 설탕에 과부하가

업데이트가 필요한 페이지/예제의 URL을 보내 주시겠습니까?

+1

@Dirk Eddelbuettel [여기] (http://dirk.eddelbuettel.com/code/rcpp.examples.html)로 이동하십시오. 그리고 그것은 작동합니다. – teucer

+2

그래,'sqrt' 앞에 지금 필요로하는'::'을 추가하여 html 페이지를 수정했습니다. –

+0

설탕'sqrt'의 @Dirk Eddelbuettel이 목록에 없습니다 (적어도 나는 그것을 보지 못했습니다 :) 모든 설탕 기능 목록이 있습니까? – teucer