On 23 September 2016 at 18:17, Amina Shahzadi wrote: | Hello Dirk, Adler and Rcpp Colleagues | | Would you please guide me why the following code is giving the error of " | | cannot convert 'arma::subview_elem1<double, arma::mtOp<unsigned int, arma::mtGlue<unsigned int, arma::mtOp<unsigned int, arma::Col<unsigned int>, arma::op_rel_noteq>, arma::mtOp<unsigned int, arma::Col<unsigned int>, arma::op_rel_noteq>, arma::glue_rel_and>, arma::op_find_simple> >' to 'double' in initialization" | | | The problem is in double alpha1 and double beta1.
The _core_ of the error message is reasonably clear: you cannot assign a arma type (of some sort ... here stemming of the subsetting) to a double. Solution: use as_scalar() -- see the Armadillo documentation for more -- ie use these three lines at the core of your loops: double alpha1 = as_scalar(alpha.elem(find(index !=i && index !=j))); double beta1 = as_scalar(beta.elem(find(index !=j && index !=j))); a(i) = exp(alpha1+beta1); Dirk | | | | The code is: | | #include <RcppArmadillo.h> | using namespace Rcpp; | using namespace RcppArmadillo; | //[[Rcpp::depends(RcppArmadillo)]] | //[[Rcpp::export]] | | // A example of indexing some elements of a vector | | arma::vec Vec_Index(arma::vec alpha, arma::vec beta) | { | int m = alpha.size(); | arma::uvec index(m); | arma::vec a(m); | for(int i=0; i<m; i++) | { | index(i) = i; | } | for(int i=0; i<m; i++){ | for(int j=0; j<m; j++){ | double alpha1 = alpha.elem(find(index !=i && index !=j)); | double beta1 = beta.elem(find(index !=j && index !=j)); | a(i) = exp(alpha1+beta1); | } | } | return a; | } | | | | | | | | | | On Thu, Sep 15, 2016 at 2:52 AM, Avraham Adler <avraham.ad...@gmail.com> wrote: | | Amina and I continued the conversation off list, but for closure purposes, | the "multiple" version was tweaked a bit as there was comparison between | signed and unsigned ints which did not throw an error for me, but did for | Amina. Final multiple version posted below. | | Thanks, | | Avi | | | #include <RcppArmadillo.h> | using namespace Rcpp; | using namespace RcppArmadillo; | using namespace arma; | //[[Rcpp::depends(RcppArmadillo)]] | | //[[Rcpp::export]] | vec Sample_Exp_Multi(size_t n, vec alpha, vec beta) { | size_t m = alpha.size(); | vec answers(n); | uvec2 S; | for (size_t i = 0; i < n; ++i){ | do { | S = randi<uvec>(2, distr_param(0, m - 1)); | } while (S(0) == S(1)); | answers(i) = exp(alpha(S(0)) + beta(S(1))); | } | return(answers); | } | | _______________________________________________ | 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 | | | | | -- | Amina Shahzadi -- http://dirk.eddelbuettel.com | @eddelbuettel | e...@debian.org _______________________________________________ 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