I tried the code that you suggested on The R prompt and it worked as expected. However the same piece of code doesn't work in my C++ app.<div><br></div><div><font class="Apple-style-span" face="'courier new', monospace">try{</font></div>
<div><div><font class="Apple-style-span" face="'courier new', monospace">        IntegerVector v = IntegerVector::create(1,2,3);</font></div><div><font class="Apple-style-span" face="'courier new', monospace">        std::vector<std::string> s(3);</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">        s[0] = "a";</font></div><div><font class="Apple-style-span" face="'courier new', monospace">        s[1] = "a";</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">        s[2] = "a";</font></div><div><font class="Apple-style-span" face="'courier new', monospace">        DataFrame df = DataFrame::create(Named("a")=v, Named("b")=s);</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">        return df;</font></div><div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace">    }</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">    catch(std::exception &e) {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">        throw;</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">    }</font></div><div><br></div><div>again I get </div><div><br></div><div>(gdb) p  R_PV(df)</div><div><div>$1 = 0</div></div><br><div class="gmail_quote">
On Mon, Jun 4, 2012 at 6:02 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">
<div class="HOEnZb"><div class="h5"><br>
On 4 June 2012 at 17:28, Pratibha Rana wrote:<br>
| Something seems to go wrong in Vector_create::create__dispatch.<br>
|<br>
| (gdb) p t1<br>
| $14 = (const Rcpp::traits::named_object<std::vector<std::basic_string<char,<br>
| std::char_traits<char>, std::allocator<char> >, std::allocator<br>
| <std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > ><br>
| &) @0x7fff5d321780: {name = "datatype", object = std::vector of length 2,<br>
| capacity 2 = {"varchar", "varchar"}}<br>
|<br>
| (gdb) p t2<br>
| $18 = (const Rcpp::traits::named_object<std::vector<int, std::allocator<int> ><br>
| > &) @0x7fff5d321760: {name = "length", object = std::vector of length 2,<br>
| capacity 2 = {10, 10}}<br>
|<br>
| (gdb) p t3<br>
| $19 = (const Rcpp::traits::named_object<std::vector<int, std::allocator<int> ><br>
| > &) @0x7fff5d321740: {name = "scale", object = std::vector of length 2,<br>
| capacity 2 = {0, 0}}<br>
|<br>
| (gdb) p res<br>
| $17 = {<Rcpp::RObject> = {<No data fields>}, <Rcpp::VectorBase<19, true,<br>
| Rcpp::Vector<19> >> = {<Rcpp::traits::expands_to_logical__impl<19>> = {<No data<br>
| fields>}, <No data fields>}, <Rcpp::internal::eval_methods<19>> = {<No data<br>
| fields>}, cache = {<Rcpp::traits::proxy_cache<19>> = {p = 0x0}, <No data<br>
| fields>}}<br>
|<br>
|<br>
| The value of res was printed at line 159 in Vector__create.h . Using Wrap()<br>
| makes it worse. I really need help. I have been trying to do this for 2 days<br>
| now.<br>
<br>
</div></div>What about the working example I just to the list?<br>
<br>
What about the following adapted from the unit test file for dataframes:<br>
<br>
<br>
R> library(inline)<br>
R><br>
R> fx <- cxxfunction(signature(), plugin="Rcpp", body='<br>
+     IntegerVector v = IntegerVector::create(1,2,3);<br>
+     std::vector<std::string> s(3);<br>
+     s[0] = "a";<br>
+     s[1] = "b";<br>
+     s[2] = "c";<br>
+     return DataFrame::create(Named("a")=v, Named("b")=s);<br>
+ ')<br>
R><br>
R> fx()<br>
  a b<br>
1 1 a<br>
2 2 b<br>
3 3 c<br>
R><br>
<br>
<br>
I usually start from self-contained working examples and then try to<br>
generalise to the specific issue at hand.<br>
<br>
Hope this helps,  Dirk<br>
<div><div class="h5"><br>
<br>
| On Mon, Jun 4, 2012 at 4:58 PM, Dirk Eddelbuettel <<a href="mailto:edd@debian.org">edd@debian.org</a>> wrote:<br>
|<br>
|<br>
|     Hi Pratibha,<br>
|<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<br>
|     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>
|     Good. Three STL vectors which should get autmatic conversion via wrap().<br>
|<br>
|     [...]<br>
|<br>
|     |        //create the dataframe<br>
|     |        Rcpp::List df = Rcpp::List::create(Rcpp::Named<br>
|     ("datatype",nameVec),<br>
|     |                                          <br>
|     Rcpp::Named("length",lenVec),<br>
|     |                                          <br>
|     Rcpp::Named("scale",scaleVec));<br>
|     |        Rcpp::DataFrame df_final = Rcpp::DataFrame::create(df);<br>
|     |        return df_final;<br>
|<br>
|     [...]<br>
|<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<br>
|     without<br>
|     | first creating the list. Nothing seems to be working.<br>
|<br>
|     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"<br>
|     collection<br>
|     of examples [ contributions welcome ] but has this ...)<br>
|<br>
|     RcppExport SEXP RcppDataFrame(SEXP Dsexp) {<br>
|<br>
|        try {                                       // or<br>
|     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")=<br>
|     NDF));<br>
|<br>
|        } catch( std::exception &ex ) {             // or use END_RCPP<br>
|     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>
|<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>
|<br>
|<br>
|<br>
</div></div>| ----------------------------------------------------------------------<br>
| _______________________________________________<br>
| Rcpp-devel mailing list<br>
| <a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-project.org</a><br>
| <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
<div class="HOEnZb"><div class="h5">--<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>
</div></div></blockquote></div><br></div>