我正在尝试使用inline
从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。
答案 0 :(得分: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>
您能否向我发送需要更新的网页/示例的网址?