Le 12/04/11 13:30, Romain Francois a écrit :
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 ) )
Sorry, I meant fx( 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