On 24 March 2011 at 01:27, nandan amar wrote: | Hello, | I tried following code for copying data from an R array to C++ array variable | ------------------------------------------------------------------ | #include <R.h> | #include <R_ext/Applic.h> | #include <Rinternals.h> | #include <RInside.h> | int main(int argc, char *argv[]) | { | | RInside R(argc, argv); | float sum[50];//int sum[50]; | R.parseEvalQ("arr<-c(1:50)") ; | for(int i=0;i<=50;i++) | sum[i] = R["arr[i]"]; | for(int i=0;i<=50;i++) | std::cout << "value: " << sum[i] << std::endl ; | exit(0); | } | ------------------------------------------------------------------------------- | It got compiled and I got following error while running. Error is same for sum | [] to be int/float | | terminate called after throwing an instance of 'Rcpp::not_compatible' | what(): expecting a single value | Aborted
You had a couple of small errors in there (indices from 0 to 50) as well as one design issue: R _and_ C++ (when using STL) know vectors, so why do this element-wise? Lastly, your 'i' is only known in C++ but not in R so it can never index. Below are two different fixed versions, each running just to 5 rather than 50. Cheers, Dirk edd@max:~/svn/rinside/pkg/inst/examples/standard$ make g++ -I/usr/share/R/include -I/usr/local/lib/R/site-library/Rcpp/include -I"/usr/local/lib/R/site-library/RInside/include" -O3 -pipe -g -Wall nandan2.cpp -L/usr/lib64/R/lib -lR -lblas -llapack -L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib -L/usr/local/lib/R/site-library/RInside/lib -lRInside -Wl,-rpath,/usr/local/lib/R/site-library/RInside/lib -o nandan2 g++ -I/usr/share/R/include -I/usr/local/lib/R/site-library/Rcpp/include -I"/usr/local/lib/R/site-library/RInside/include" -O3 -pipe -g -Wall nandan.cpp -L/usr/lib64/R/lib -lR -lblas -llapack -L/usr/local/lib/R/site-library/Rcpp/lib -lRcpp -Wl,-rpath,/usr/local/lib/R/site-library/Rcpp/lib -L/usr/local/lib/R/site-library/RInside/lib -lRInside -Wl,-rpath,/usr/local/lib/R/site-library/RInside/lib -o nandan edd@max:~/svn/rinside/pkg/inst/examples/standard$ ./nandan; cat nandan.cpp value: 1 value: 2 value: 3 value: 4 value: 5 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8; -*- #include <RInside.h> int main(int argc, char *argv[]) { RInside R(argc, argv); float sum[5];//int sum[50]; R.parseEvalQ("arr <- c(1:50)") ; for(int i=1;i<=5;i++) { char txt[32]; sprintf(txt, "z <- arr[%d]; z", i); sum[i-1] = R.parseEval(txt);; } for(int i=0;i<5;i++) std::cout << "value: " << sum[i] << std::endl ; exit(0); } edd@max:~/svn/rinside/pkg/inst/examples/standard$ ./nandan2; cat nandan2.cpp value: 1 value: 2 value: 3 value: 4 value: 5 // -*- mode: C++; c-indent-level: 4; c-basic-offset: 4; tab-width: 8; -*- #include <RInside.h> int main(int argc, char *argv[]) { RInside R(argc, argv); float sum[5];//int sum[50]; R.parseEvalQ("arr <- c(1:50)") ; for(int i=1;i<=5;i++) { char txt[32]; sprintf(txt, "z <- arr[%d]", i); R.parseEvalQ(txt); sum[i-1] = R["z"]; } for(int i=0;i<5;i++) std::cout << "value: " << sum[i] << std::endl ; exit(0); } edd@max:~/svn/rinside/pkg/inst/examples/standard$ -- Dirk Eddelbuettel | e...@debian.org | http://dirk.eddelbuettel.com _______________________________________________ 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