It is not possible to convert a data frame to a matrix without copying data.
But normally algorithms that need a matrix become noticeably less efficient when applied to data frames. If this is your case, I would simply encourage the user to pass a matrix into your function in the first place. The sooner the right data structure is used, the less gratuitous conversion needs to happen. I think there is no one answer to this though... what is your algorithm? Would it work well on column vectors? On April 30, 2022 9:38:49 PM PDT, Roberto Spadim <robe...@spadim.com.br> wrote: >Uhm >Converting from one to other copy data? From dataframe to matrix at least? > >Em sáb., 30 de abr. de 2022 às 14:26, Jeff Newmiller < >jdnew...@dcn.davis.ca.us> escreveu: > >> A data frame is designed to represent different types in different >> columns. A matrix is designed so that all elements are the same. >> >> It sounds like you need matrices for your algorithm. I would simply >> require that... or attempt to convert it immediately and stop if the result >> is not numeric. >> >> On April 30, 2022 10:16:04 AM PDT, Roberto Spadim <robe...@spadim.com.br> >> wrote: >> >Hi folks! >> > >> >What's the best pratices to accept a dataframe and numericmatrix in a >> function? >> > >> >Should I have two different methods to deal with NumericMatrix and >> DataFrame? >> >Could I convert DataFrame to matrix? What's the impact of doing this, >> >i.e. does the as.matrix copy dataframe data? >> > >> >Thanks in advance! >> > >> >--- >> >Today I'm doing something like this: >> > >> >void RCPP_function(const RObject &vec, const RObject &mat) { >> > if(mat.isNULL()) >> > Rcpp::stop("mat can't be null"); >> > NumericMatrix variable_matrix; >> > if (is<NumericMatrix>(mat)) >> > variable_matrix = as<NumericMatrix>(mat); >> > else >> > variable_matrix = Rcpp::internal::convert_using_rfunction(mat, >> "as.matrix"); >> > >> > NumericVector variable_vector; >> > if((is<NumericVector>(target) || is<DataFrame>(target)) && >> !target.isNULL()){ >> > variable_vector=as<NumericVector>(target); >> > }else{ >> > variable_vector=colMeans(variable_matrix); >> > } >> > >> > ... >> > do something with data >> > but here it's sure to be: >> > NumericVector (variable_vector) >> > NumericMatrix (variable_matrix) >> > ... >> >} >> > >> > >> >-- >> >Roberto Spadim >> >_______________________________________________ >> >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 >> -- >> Sent from my phone. Please excuse my brevity. >> -- Sent from my phone. Please excuse my brevity. _______________________________________________ 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