[Rcpp-devel] error handling for computational singularity

Xiao He praguewatermelon at gmail.com
Sun Jul 7 22:17:55 CEST 2013


Thanks for the reply.

I tried the following:

#########################################################
RcppExport SEXP foo( SEXP X, SEXP Y) {
 try {
arma::mat x=Rcpp::as<arma::mat>(X), y=Rcpp::as<arma::mat>(Y);
 arma::mat output;
output = arma::solve( x, y );
return(wrap( output) );
 } catch( std::exception& __ex__ ) {
::Rf_error( "System is computationally singular" );
 //forward_exception_to_r( __ex__ );
} catch(...) {
::Rf_error( "c++ exception (unknown reason)" );
 }
}
#########################################################


This would give me the message below. I wonder if there is any way
to suppress the error message generated by Armadillo (" error: solve():
solution not found") and only output the custom error message (e.g.,
"Error: System is computationally singular").  Or conversely, is it
possible to only show the error message thrown by Armadillo? Thanks.


##########################################

> m = cbind(1:2, 1:2)
> m
     [,1] [,2]
[1,]    1    1
[2,]    2    2

> .Call("foo", m, m)

error: solve(): solution not found

Error: System is computationally singular

##########################################





On Sat, Jul 6, 2013 at 9:28 PM, Dirk Eddelbuettel <edd at debian.org> wrote:

>
> On 6 July 2013 at 18:56, Xiao He wrote:
> | Hi dear listers,
> |
> | Take the mock function below for an example. What would be the best way
> to
> | handle computational singularity?
>
> That is essentially a _statistical_ issue and not a Rcpp problem so that is
> not really the right forum.
>
> | #include <R.h>
> | #include <stdio.h>
> | #include <RcppArmadillo.h>
> | // [[Rcpp::depends(RcppArmadillo)]]
> |
> | using namespace Rcpp;
> | using namespace arma;
> |
> | RcppExport SEXP foo(SEXP X, SEXP Y){
> | arma::mat x=Rcpp::as<arma::mat>(X), y=Rcpp::as<arma::mat>(Y);
> | arma::mat output = arma::solve(x, y );
> | return(wrap(output));
> | }
> |
> |
> | For instance, if I use the function on the dataset below, R would crash.
> I read
> | the error handling section of the document in
> http://www.jstatsoft.org/v40/i08/
> | paper, but I am not exactly sure what to do with my situation. Thank you
> in
>
> Rcpp offers support for exception handling -- meaning that _you_ could
> decide
> to throw an exception to signal to the user that his data is not right /
> properly conditioned.
>
> See the Armadillo documentation to learn how to test rank of matrices
> etc. You may also learn that sole() is for a matrix and a vector, not two
> vectors.
>
> Dirk
>
>
> | advance for your help!
> |
> | x = cbind(1:2, 1:2)
> | .Call("foo", x, x)
> |
> |
> |
> | ----------------------------------------------------------------------
> | _______________________________________________
> | Rcpp-devel mailing list
> | Rcpp-devel at lists.r-forge.r-project.org
> | https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel
> --
> Dirk Eddelbuettel | edd at debian.org | http://dirk.eddelbuettel.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.r-forge.r-project.org/pipermail/rcpp-devel/attachments/20130707/5e63b0de/attachment.html>


More information about the Rcpp-devel mailing list