On 9 October 2014 at 14:07, Christian Authmann wrote: | Hello, | | this sounds like a newbie question, but I haven't been able to find a | good answer in Rcpp's documentation, source or testcases.. | | Say I have an internal data type which I want to wrap/unwrap as a DataFrame. | | template<> SEXP wrap(const Foo &foo) { | Rcpp::DataFrame dataframe; | for (auto key : foo.keys()) { | if (key.is_numeric()) { | Rcpp::NumericVector vec; | // Fill vector with numbers | dataframe[ key ] = vec; | } | else if (key.is_string()) { | Rcpp::StringVector vec; | // Fill vector with strings | dataframe[ key ] = vec; | } | // etc | } | } | | template<> Foo as(SEXP sexp) { | Rcpp::DataFrame dataframe(sexp); | // now what? | } | | | First, I need to iterate over all vectors in the dataframe. I could | access a vector using | dataframe["my_key"] | but that would require me to have a list of all the keys/column names | first. R has a colnames() function, but getting that into an | Rcpp::Function and calling it seems overly complicated.. | I couldn't find anything in Rcpp's source or testcases.. but maybe | there's a simpler way?
DataFrame objects are clunky, that's just the way it is. It is a glorified list of vectors, possibly of different types, with the added constraint of equal length. Not much more really. | Problem number two, how do I type the vector once I have it? The | dataframe can contain NumericVector or StringVector (or possibly | something different). Should I just construct each type, try/catch the | exceptions and see what fits, or is there a better way to determine the | type of a SEXP? In my usage I typically assume that I know the layout. So if the third column is, say, a vector of strings I would assign it to that. For free-form incoming data that is a little harder but I believe we have several 'dispatching based on types' examples floating around here, on the Rcpp Gallery and/or other places. The joys of interfacing a dynamically-typed language with a statically-typed one :) Dirk -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org _______________________________________________ Rcpp-devel mailing list Rcpp-devel@lists.r-forge.r-project.org https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel