[Rcpp-devel] data.frame from R to C++?

deqiang sun deqiangs at bcm.edu
Tue Apr 12 12:38:09 CEST 2011


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 | edd at 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
> 
> 



More information about the Rcpp-devel mailing list