[Rcpp-devel] Error for exp() using RcppArmadillo

Balamuta, James Joseph balamut2 at illinois.edu
Mon Sep 12 06:04:41 CEST 2016

Greetings and Salutations,

The operation that you are using here:


Returns a double instead of an arma::vec. Hence,

from ‘double’ to ‘arma::vec {aka arma::Col<double>}’

To fix this, use:

        arma::vec temp(1);
        temp << exp(alpha1(0)+beta1(1)); // assumes 1 element in alpha1 and 2 elements in beta1
        return temp;

In addition, you should supply a return at the end of the function…

  return arma::zeros<arma::vec>(0);

Returns a vector of length 0.



From: rcpp-devel-bounces at lists.r-forge.r-project.org [mailto:rcpp-devel-bounces at lists.r-forge.r-project.org] On Behalf Of Amina Shahzadi
Sent: Sunday, September 11, 2016 10:30 PM
To: rcpp-devel at lists.r-forge.r-project.org
Subject: [Rcpp-devel] Error for exp() using RcppArmadillo

Hello Dear
I am new user of RcppArmadillo and Rcpp.
I am using a sample function pasted here.  I am haivng error given below: Any can help in this regard.

In function ‘arma::vec sample(arma::vec, arma::vec)’:
sample.cpp:23:35: error: could not convert ‘exp((alpha1.arma::Col<double>::<anonymous>.arma::Mat<eT>::operator()<double>(0u) + beta1.arma::Col<double>::<anonymous>.arma::Mat<eT>::operator()<double>(1u)))’ from ‘double’ to ‘arma::vec {aka arma::Col<double>}’
      return exp(alpha1(0)+beta1(1));
sample.cpp:34:1: warning: control reaches end of non-void function [-Wreturn-type]

My function sample.cpp is below.

#include <RcppArmadillo.h>
using namespace Rcpp;
using namespace RcppArmadillo;

arma::vec sample(arma::vec alpha, arma::vec beta)
        int m = alpha.size();
        arma::uvec index(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++)
                                        arma::vec alpha1 = alpha.elem(find(index !=j));
                                        arma::vec beta1 = beta.elem(find(index!=j));
                                        return exp(alpha1(0)+beta1(1));
                                        arma::vec  alpha2 = alpha.elem(find(index !=i && index !=j));
                                        arma::vec beta2 = beta.elem(find(index !=i && index !=j));
                                        return exp(alpha2+beta2);


Amina Shahzadi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20160912/64d364e2/attachment-0001.html>

More information about the Rcpp-devel mailing list