I am trying to open a file within an Rcpp function, so I need the file name as a char* or std::string.
So far, I have tried the following:
#include <Rcpp.h>
#include <boost/algorithm/string.hpp>
#include <fstream>
#include <string>
RcppExport SEXP readData(SEXP f1) {
Rcpp::CharacterVector ff(f1);
std::string fname = Rcpp::as(ff);
std::ifstream fi;
fi.open(fname.c_str(),std::ios::in);
std::string line;
fi >> line;
Rcpp::CharacterVector rline = Rcpp::wrap(line);
return rline;
}
But apparently, as
does not work for Rcpp::CharacterVector
as I get a compile time error.
foo.cpp: In function 'SEXPREC* readData(SEXPREC*)':
foo.cpp:8: error: no matching function for call to 'as(Rcpp::CharacterVector&)'
make: *** [foo.o] Error 1
Is there a simple way to get a string from the argument or somehow open a file from the Rcpp function argument?
Rcpp::as()
expects a SEXP
as input, not a Rcpp::CharacterVector
. Try passing the f1
parameter directly to Rcpp::as()
, eg:
std::string fname = Rcpp::as(f1);
Or:
std::string fname = Rcpp::as<std::string>(f1);