Thanks Dirk.

When I run it inline I have not problem:

library(RcppArmadillo)
library(inline)

# The function draws a vector of random deviates from the multivariate
# Laplace of Kotz (zero mean) given a correlation matrix R.
fx <- cxxfunction( signature(R = "matrix", Z = "numeric" ) , '
Rcpp::NumericMatrix RR(R);
Rcpp::NumericVector RZ(Z);
int m = RR.nrow();
arma::mat AR(RR.begin(), m, m, true);
arma::rowvec AZ = Rcpp::as<arma::rowvec>(RZ);
Rcpp::RNGScope();
double e  = Rf_rexp(1);
arma::vec eigval(m);
arma::mat eigvec(m, m);
arma::mat temp(m, m);
arma::eig_sym(eigval, eigvec, AR);
arma::rowvec ans(m);
temp = ( eigvec * arma::diagmat( arma::sqrt( eigval ) ) * arma::inv( eigvec ) );
ans = sqrt(e) * (AZ * temp);
return Rcpp::wrap(ans);
', plugin = "RcppArmadillo" )

R = diag(5)
Z = rnorm(5)

# This works.
fx(R, Z)


But when I do a package check it fails (unless I comment out trunc and ftrunc in sugar folder). The function in the package (which is meant to be called internally by another routine) is:

arma::rowvec rmvlx(arma::mat R, arma::rowvec Z){
Rcpp::RNGScope();
double e  = Rf_rexp(1);
int m = R.n_rows;
arma::vec eigval(m);
arma::mat eigvec(m, m);
arma::mat temp(m, m);
arma::eig_sym(eigval, eigvec, R);
arma::rowvec ans(m);
temp = ( eigvec * arma::diagmat( arma::sqrt( eigval ) ) * arma::inv( eigvec ) );
ans = sqrt(e) * (Z * temp);
return ans;
}


On 30/05/2012 12:38, Dirk Eddelbuettel wrote:

Hi Alexios,

On 30 May 2012 at 12:00, alexios ghalanos wrote:
| Hi,
|
| While writing some extra functions into the rmgarch package (on r-forge)
| which uses RcppArmadillo, I encountered the error relating to 'trunc'
| and 'ftrunc' already discussed here:
|
| 
http://lists.r-forge.r-project.org/pipermail/rcpp-devel/2010-September/001123.html

That's a long time ago, a few things changed.  That old email was regarding
OS X, your sessionInfo() shows Windows.

| This occurred for the first time once I made use of Rf_exp and Rf_rchisq
| in code mixed with RcppArmadillo.

Can you provide a self-contained example, maybe via inline as we often do here?

| While the workaround described in the previous discussion works (i.e.
| undefine the two macros in sugar) for me, it will not work for my
| package once I release the update on r-forge.
|
| Could you please suggest some solution or some mistake I am making which
| gives rise to this problem?

We will certainly try to help, but so far we have nothing reproducible -- the
following works, and combines RcppArmadillo with rexp and rchisq:

R>  library(inline)
R>
R>  f<- cxxfunction(signature(), plugin="RcppArmadillo", body='
+   arma::colvec X(2);
+   RNGScope scope;
+   X(0) = Rf_rexp(1);
+   X(1) = Rf_rchisq(1);
+   return Rcpp::wrap(X);
+ ')
R>  set.seed(42); f()
          [,1]
[1,] 0.198337
[2,] 0.755413
R>  set.seed(42); f()
          [,1]
[1,] 0.198337
[2,] 0.755413
R>  set.seed(42); f()
          [,1]
[1,] 0.198337
[2,] 0.755413
R>

Dirk

| sessionInfo ()
| R version 2.15.0 (2012-03-30)
| Platform: x86_64-pc-mingw32/x64 (64-bit)
|
| attached base packages:
| [1] stats     graphics  grDevices utils     datasets  methods   base
|
| other attached packages:
| [1] RcppArmadillo_0.3.2.0 Rcpp_0.9.10
|
| loaded via a namespace (and not attached):
| [1] tools_2.15.0
|
|
| Thanks and Regards,
|
| Alexios
| _______________________________________________
| Rcpp-devel mailing list
| [email protected]
| https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel


_______________________________________________
Rcpp-devel mailing list
[email protected]
https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel

Reply via email to