2011-03-14 10 views
3

私はinlineRcpp Webページから簡単な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でWindows XPを使用しています(他のSTLを使用しない例があります!)、R 2.12.0。

答えて

6

ああ。あなたが明示的にC.から輸入されたグローバルなC++の名前空間からのシンボルを参照する必要があるので、sqrt()は現在Rcpp糖に過負荷になっているので、代わりにこのラインを試してみてください。それがここで働く

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> 

更新が必要なページ/例のURLを私に送信できますか?

+1

@Dirk Eddelbuettel [ここ](http://dirk.eddelbuettel.com/code/rcpp.examples.html)あなたは行き​​ます。それはうまくいく! – teucer

+2

私は、 'sqrt'の前に必要な' :: 'を追加することでhtmlページも修正しました。 –

+0

@Dirk Eddelbuettel in sugar 'sqrt'はリストされていません(少なくとも私はそれを見ていません:))すべてのsugar関数のリストはありますか? – teucer