2011-03-14 79 views
3

我試圖從Rcpp網頁與inline編譯簡單Rcpp exampleRCPP編譯錯誤

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。

回答

6

啊。 sqrt()現在超載的RCPP糖,所以你需要明確地指符號從全局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嗎?

+1

@Dirk Eddelbuettel [here](http://dirk.eddelbuettel.com/code/rcpp.examples.html)你走了。它的工作原理,thx! – teucer 2011-03-14 14:34:24

+2

好吧,我通過在'sqrt'之前添加現在需要的'::'來修復html頁面。 – 2011-03-14 14:40:59

+0

@dirk Eddelbuettel糖'sqrt'沒有列出(至少我沒有看到它:))是否有一個所有的糖功能列表? – teucer 2011-03-14 20:45:26