4

Rcpp Webページから単純なRcppの例をコンパイルしようとしています:inline

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>)

私は Windows XP を Rtools (STL を使用しない他の例で動作します!) と R 2.12.0 で使用しています。

4

1 に答える 1

6

ああ。sqrt()は Rcpp sugar でオーバーロードされるようになったため、C からインポートされたグローバル C++ 名前空間のシンボルを明示的に参照する必要があります。代わりに、次の行を試してください。

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 を送ってもらえますか?

于 2011-03-14T14:19:10.950 に答える