[Rcpp-devel] call R internal adist function from Rcpp
Dirk Eddelbuettel
edd at debian.org
Mon Dec 30 19:33:47 CET 2013
Amine,
On 30 December 2013 at 19:26, contact AG STUDY wrote:
| I need to call R adist function over a big vector, many times.
| Internally , adist is calling adist_full defined in src/main/agrep.c. So
| wonder If I can call the c function adist_full directly from my c++ code.
You may need to reimplement the adist_full() function in your own package.
You can start by copying it and then figuring out one-by-one what the
dependencies are, and satisfy those.
I am not so familiar with the NPL and text regression fields, but similar
functionality may be available somewhere else too.
| My workaround is to give adist as a Function parameter. here my code:
| #include <Rcpp.h>
| using namespace Rcpp;
|
| // [[Rcpp::export]]
| List call_adist(CharacterVector y, Function f,int tol=16) {
| std::vector<std::vector<int> > out;
| std::vector<std::string> input = as<std::vector<std::string> >(y);
| for (std::vector<std::string>::iterator it = input.begin() ; it !=
| input.end(); ++it){
| // can I change f call by adist_full(*it,y,costs,false)?
| std::vector<int> res = as<std::vector<int> >(f(*it,y));
This will indeed not be fast as you call out to R each time. You would need
this functionality as C/C++ code.
Dirk
| out.push_back(res);
| }
| return Rcpp::wrap(out);
| }
| Then I call it like :
|
| call_adist(vv,adist)
|
| But this is less efficient than lapply(vv,adist).
|
| Happy New Year!
|
|
|
|
|
| ----------------------------------------------------------------------
| _______________________________________________
| Rcpp-devel mailing list
| Rcpp-devel at lists.r-forge.r-project.org
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
--
Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
More information about the Rcpp-devel
mailing list