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