I am a new Rcpp user, and I have been trying to do a simple exercise of generating random numbers to put into a vector. To start off, the following code works: > code <- 'Rcpp::RNGScope scope; + Rcpp::NumericVector rn(5); + rn = rnorm(5,0,1); + return Rcpp::wrap(rn); + ' > > fun <- cxxfunction(body=code, plugin="Rcpp") cygwin warning: MS-DOS style path detected: C:/R/R-215~1.1/etc/i386/Makeconf Preferred POSIX equivalent is: /cygdrive/c/R/R-215~1.1/etc/i386/Makeconf CYGWIN environment variable option "nodosfilewarning" turns off this warning. Consult the user's guide for more details about POSIX paths: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames > > (res <- fun()) [1] 1.7517515 0.3178733 -0.6957581 1.7030360 -1.6546936
When I try to do the same thing, but in a loop as shown here: > code <- 'Rcpp::RNGScope scope; + Rcpp::NumericVector rn(5); + for (int i=0; i < 5; i++) { + rn(i) = rnorm(1,0,1); + } + return Rcpp::wrap(rn); + ' > > fun <- cxxfunction(body=code, plugin="Rcpp") the result is an error message indicating that it cannot convert a NumericVector to double. Since in the first example I did not index, I am assuming that I have indexed incorrectly, but I can't see how. Below is the detailed error message - any idea what I am doing wrong? cygwin warning: MS-DOS style path detected: C:/R/R-215~1.1/etc/i386/Makeconf Preferred POSIX equivalent is: /cygdrive/c/R/R-215~1.1/etc/i386/Makeconf CYGWIN environment variable option "nodosfilewarning" turns off this warning. Consult the user's guide for more details about POSIX paths: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames file15182ecd2ee.cpp: In function 'SEXPREC* file15182ecd2ee()': file15182ecd2ee.cpp:33:31: error: cannot convert 'Rcpp::NumericVector {aka Rcpp::Vector<14>}' to 'Rcpp::traits::storage_type<14>::type {aka double}' in assignment make: *** [file15182ecd2ee.o] Error 1 ERROR(s) during compilation: source code errors or compiler configuration errors! Program source: 1: 2: // includes from the plugin 3: 4: #include <Rcpp.h> 5: 6: 7: #ifndef BEGIN_RCPP 8: #define BEGIN_RCPP 9: #endif 10: 11: #ifndef END_RCPP 12: #define END_RCPP 13: #endif 14: 15: using namespace Rcpp; 16: 17: 18: // user includes 19: 20: 21: // declarations 22: extern "C" { 23: SEXP file15182ecd2ee( ) ; 24: } 25: 26: // definition 27: 28: SEXP file15182ecd2ee( ){ 29: BEGIN_RCPP 30: Rcpp::RNGScope scope; 31: Rcpp::NumericVector rn(5); 32: for (int i=0; i < 5; i++) { 33: rn(i) = rnorm(1,0,1); 34: } 35: return Rcpp::wrap(rn); 36: 37: END_RCPP 38: } 39: 40: Error in compileCode(f, code, language = language, verbose = verbose) : Compilation ERROR, function(s)/method(s) not created! cygwin warning: MS-DOS style path detected: C:/R/R-215~1.1/etc/i386/Makeconf Preferred POSIX equivalent is: /cygdrive/c/R/R-215~1.1/etc/i386/Makeconf CYGWIN environment variable option "nodosfilewarning" turns off this warning. Consult the user's guide for more details about POSIX paths: http://cygwin.com/cygwin-ug-net/using.html#using-pathnames file15182ecd2ee.cpp: In function 'SEXPREC* file15182ecd2ee()': file15182ecd2ee.cpp:33:31: error: cannot convert 'Rcpp::NumericVector {aka Rcpp::Vector<14>}' to 'Rcpp::traits::storage_type<14>::type {aka double}' in assignment make: *** [file15182ecd2ee.o] Error 1 In addition: Warning message: running command 'C:/R/R-215~1.1/bin/i386/R CMD SHLIB file15182ecd2ee.cpp 2> file15182ecd2ee.cpp.err.txt' had status 1
_______________________________________________ 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