Something seems to go wrong in Vector_create::create__dispatch.<div><br></div><div><div><font class="Apple-style-span" face="'courier new', monospace">(gdb) p t1</font></div><div><font class="Apple-style-span" face="'courier new', monospace">$14 = (const Rcpp::traits::named_object<std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > &) @0x7fff5d321780: {name = "datatype", object = std::vector of length 2, capacity 2 = {"varchar", "varchar"}}</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><div><font class="Apple-style-span" face="'courier new', monospace">(gdb) p t2</font></div><div><font class="Apple-style-span" face="'courier new', monospace">$18 = (const Rcpp::traits::named_object<std::vector<int, std::allocator<int> > > &) @0x7fff5d321760: {name = "length", object = std::vector of length 2, capacity 2 = {10, 10}}</font></div>
</div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><div><font class="Apple-style-span" face="'courier new', monospace">(gdb) p t3</font></div><div><font class="Apple-style-span" face="'courier new', monospace">$19 = (const Rcpp::traits::named_object<std::vector<int, std::allocator<int> > > &) @0x7fff5d321740: {name = "scale", object = std::vector of length 2, capacity 2 = {0, 0}}</font></div>
</div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><div><font class="Apple-style-span" face="'courier new', monospace">(gdb) p res</font></div><div><font class="Apple-style-span" face="'courier new', monospace">$17 = {<Rcpp::RObject> = {<No data fields>}, <Rcpp::VectorBase<19, true, Rcpp::Vector<19> >> = {<Rcpp::traits::expands_to_logical__impl<19>> = {<No data fields>}, <No data fields>}, <Rcpp::internal::eval_methods<19>> = {<No data fields>}, cache = {<Rcpp::traits::proxy_cache<19>> = {p = 0x0}, <No data fields>}}</font></div>
</div><div><br></div><div><br></div><div>The value of res was printed at line 159 in Vector__create.h . Using Wrap() makes it worse. I really need help. I have been trying to do this for 2 days now.</div><div><br></div><br>
<div class="gmail_quote">On Mon, Jun 4, 2012 at 4:58 PM, Dirk Eddelbuettel <span dir="ltr"><<a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Hi Pratibha,<br>
<div class="im"><br>
On 4 June 2012 at 16:12, Pratibha Rana wrote:<br>
| I am at my wits end trying to create  a dataframe from a list of values that I<br>
| have. here's the code<br>
|<br>
| try{<br>
|        int size =  argTypes.getColumnCount();<br>
|        std::vector<std::string> nameVec(size);<br>
|        std::vector<int> lenVec(size);<br>
|        std::vector<int> scaleVec(size);<br>
<br>
</div>Good. Three STL vectors which should get autmatic conversion via wrap().<br>
<br>
[...]<br>
<div class="im"><br>
|        //create the dataframe<br>
|        Rcpp::List df = Rcpp::List::create(Rcpp::Named("datatype",nameVec),<br>
|                                           Rcpp::Named("length",lenVec),<br>
|                                           Rcpp::Named("scale",scaleVec));<br>
|        Rcpp::DataFrame df_final = Rcpp::DataFrame::create(df);<br>
|        return df_final;<br>
<br>
</div>[...]<br>
<div class="im"><br>
| The std::vectors are created fine but the list is not created<br>
| (gdb) p R_PV(df)<br>
| $3 = 0<br>
|<br>
|<br>
| I have tried a lot of variation like creating the dataframe directly without<br>
| first creating the list. Nothing seems to be working.<br>
<br>
</div>It should work. I believe we posted example on the list, blog, possibly in<br>
RcppExamples, ...<br>
<br>
<br>
In fact, the latter one may be the best key.  Consider this example taken<br>
straight from the RcppExamples packages (which never became "the" collection<br>
of examples [ contributions welcome ] but has this ...)<br>
<br>
RcppExport SEXP RcppDataFrame(SEXP Dsexp) {<br>
<br>
    try {                                       // or use BEGIN_RCPP macro<br>
<br>
      // construct the data.frame object<br>
      Rcpp::DataFrame DF = Rcpp::DataFrame(Dsexp);<br>
<br>
      // and access each column by name<br>
      Rcpp::IntegerVector a = DF["a"];<br>
      Rcpp::CharacterVector b = DF["b"];<br>
      Rcpp::DateVector c = DF["c"];<br>
<br>
      // do something<br>
      a[2] = 42;<br>
      b[1] = "foo";<br>
      c[0] = c[0] + 7;                      // move up a week<br>
<br>
      // create a new data frame<br>
      Rcpp::DataFrame NDF =<br>
          Rcpp::DataFrame::create(Rcpp::Named("a")=a,<br>
                                  Rcpp::Named("b")=b,<br>
                                  Rcpp::Named("c")=c);<br>
<br>
      // and return old and new in list<br>
      return(Rcpp::List::create(Rcpp::Named("origDataFrame")=DF,<br>
                                Rcpp::Named("newDataFrame")=NDF));<br>
<br>
    } catch( std::exception &ex ) {             // or use END_RCPP macro<br>
        forward_exception_to_r( ex );<br>
    } catch(...) {<br>
        ::Rf_error( "c++ exception (unknown reason)" );<br>
    }<br>
    return R_NilValue; // -Wall<br>
}<br>
<br>
<br>
The main difference is that we use Rcpp vectors.  So you could try<br>
<br>
 -- wrap() in the create() call<br>
 -- converting the Rcpp vectors to STL vectors<br>
 -- debugging why STL vectors don't pass through<br>
<br>
Please keep the list posted on your progress.<br>
<span class="HOEnZb"><font color="#888888"><br>
Dirk<br>
<br>
--<br>
Dirk Eddelbuettel | <a href="mailto:edd@debian.org">edd@debian.org</a> | <a href="http://dirk.eddelbuettel.com" target="_blank">http://dirk.eddelbuettel.com</a><br>
</font></span></blockquote></div><br></div>