Hmmm. I have a bad feeling about this. I sense a disturbance in the force.

It goes down to coerceVector not doing its job on factors:

require( Rcpp )
require( inline )
v1 <- as.factor( c("c3", "c1", "c2" ) )
fx <- cfunction( signature( x = "factor" ), '
    SEXP s = PROTECT( coerceVector( x, STRSXP ) ) ;
    UNPROTECT(1);
    return s ;
' )


> fx( as.integer( v1 ) )
[1] <NA> <NA> <NA>
Levels: c1 c2 c3

> version
               _
platform       x86_64-apple-darwin9.8.0
arch           x86_64
os             darwin9.8.0
system         x86_64, darwin9.8.0
status         beta
major          2
minor          13.0
year           2011
month          04
day            04
svn rev        55296
language       R
version.string R version 2.13.0 beta (2011-04-04 r55296)

coerceVector is used by r_cast<STRSXP>, which is used by the ctor for StringVector.

...

Le 12/04/11 12:38, deqiang sun a écrit :
How should I read the txt in the following context?
c3      3a
c1      1b
c2      2c

The code I have is
                RInside R(argc, argv);
                SEXP ans;

                std::string txt = "a=read.csv('xxx.xls',sep='\t',head=F)";
                ans = R.parseEval(txt);
                Rcpp::DataFrame DF(ans);

                Rcpp::StringVector x1 = DF["V1"];
                Rcpp::StringVector x2 = DF["V2"];

But the print of x1 and x2 is
3       3       
1       1       
2       2       

What's wrong with my code?

Thanks,

Dsun
On Apr 12, 2011, at 4:14 AM, Romain Francois wrote:

Le 12/04/11 10:57, deqiang sun a écrit :
Hi Dirk,

Thanks very much for your example. From this example I learned how to passing 
data back and forth between R and C++.
The example is R code and uses piece of C++ code in side R program.
Well, it's better if you put this example(by only making slight changes to make 
R embeded in C++) inside package RInside.

Accessing data by column name is the feature I ( and other people) usually want.
However, is there a way to access the data Frame by row number?

No. You access the column, and then do whatever with each element, as in
Dirk's example.

Regards.

Dsun
On Apr 8, 2011, at 9:56 AM, Dirk Eddelbuettel wrote:


Ok, I now committed a slightly nice example to RcppExamples, a package I
should revamp to contain more examples.  In there, we now receive a
data.frame, operate on each column, create a new data and return old and new.

The core of the code (inside the try/catch protection) is

      // construct the data.frame object
      Rcpp::DataFrame DF = Rcpp::DataFrame(Dsexp);

      // and access each column by name
      Rcpp::IntegerVector a = DF["a"];
      Rcpp::CharacterVector b = DF["b"];
      Rcpp::DateVector c = DF["c"];

      // do something
      a[2] = 42;
      b[1] = "foo";
      c[0] = c[0] + 7;                      // move up a week

      // create a new data frame
      Rcpp::DataFrame NDF =
          Rcpp::DataFrame::create(Rcpp::Named("a")=a,
                                  Rcpp::Named("b")=b,
                                  Rcpp::Named("c")=c);

      // and return old and new in list
      return(Rcpp::List::create(Rcpp::Named("origDataFrame")=DF,
                                Rcpp::Named("newDataFrame")=NDF));


Dirk
--
Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com

--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
http://romain-francois.com
|- http://bit.ly/fhqbRC : Rcpp workshop in Chicago on April 28th
|- http://bit.ly/dFyZGB : Hydraulique au Montpellier Comedie Club
`- http://bit.ly/eVXit9 : Eponyme : 40 minutes stand up






--
Romain Francois
Professional R Enthusiast
+33(0) 6 28 91 30 30
http://romainfrancois.blog.free.fr
http://romain-francois.com
|- http://bit.ly/fhqbRC : Rcpp workshop in Chicago on April 28th
|- http://bit.ly/dFyZGB : Hydraulique au Montpellier Comedie Club
`- http://bit.ly/eVXit9 : Eponyme : 40 minutes stand up


_______________________________________________
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

Reply via email to