I am trying to extract elements from a sparse matrix using RcppEigen by a
function called Aiijj (to mimic A[ii,jj]). I do
library(inline)
library(RcppEigen)
src <- '
using Eigen::Map;
using Eigen::SparseMatrix;
using Eigen::MappedSparseMatrix;
using Eigen::VectorXd;
using namespace Rcpp;
typedef Eigen::MappedSparseMatrix<double> MSpMat;
const MSpMat A(as<MSpMat>(AA_));
int i = as<int>(ii_)-1;
int j = as<int>(jj_)-1;
double ans;
ans = A(i,j);
return(wrap(ans));
'
Aiijj <- cxxfunction(signature(AA_="matrix", ii_="integer", jj_="integer"),
body=src, plugin="RcppEigen")
Compilation gives:
31: using Eigen::Map;
32: using Eigen::SparseMatrix;
33: using Eigen::MappedSparseMatrix;
34: using Eigen::VectorXd;
35: using namespace Rcpp;
36: typedef Eigen::MappedSparseMatrix<double> MSpMat;
37: const MSpMat A(as<MSpMat>(AA_));
38: int i = as<int>(ii_)-1;
39: int j = as<int>(jj_)-1;
40: double ans;
41: ans = A(i,j);
42: return(wrap(ans));
43:
44: END_RCPP
45: }
46:
47:
Error in compileCode(f, code, language = language, verbose = verbose) :
Compilation ERROR, function(s)/method(s) not created! file82c57e4a4f.cpp: In
function 'SEXPREC* file82c57e4a4f(SEXP, SEXP, SEXP)':
file82c57e4a4f.cpp:41:12: error: no match for call to '(const MSpMat {aka const
Eigen::MappedSparseMatrix<double>}) (int&, int&)'
make: *** [file82c57e4a4f.o] Error 1
In addition: Warning message:
To me it seems that I can not acces entries (i,j) using A(i,j) when A is a
sparse matrix. Is that so? - and if yes, any suggestions on what I can do
alternatively?
(I am new to the Rcpp-world so apologies if this is a trivial question).
Regards
Søren
-----Original Message-----
From: [email protected]
[mailto:[email protected]] On Behalf Of Douglas
Bates
Sent: 25. juni 2012 17:37
To: Dirk Eddelbuettel
Cc: [email protected]
Subject: Re: [Rcpp-devel] Using sparse matrices from the Matrix package in Rcpp
On Sun, Jun 24, 2012 at 1:19 PM, Dirk Eddelbuettel <[email protected]> wrote:
>
> On 24 June 2012 at 19:56, Glenn Lawyer wrote:
> | I would suggest using the eigen library, Rccp has an interface to this.
> | Alternately, you could link to the boost graph library.
>
> Spot on.
>
> It was in fact the availability of (more) sparse matrix methods (even
> though they were (are ?) under development and not fully mature) that
> lead Doug from Armadillo to Eigen. I am sure he will follow-up here too.
Indeed. There is good support for sparse matrices in Eigen including the use
of the Cholmod functions from the Matrix package, although the latter requires
a bit of effort.
With the release of Eigen 3.1 today, sparse matrices are now a supported part
of Eigen. I have not yet incorporated Eigen 3.1 into RcppEigen but will do so.
> Boost Graph is interesting as CRAN had the RBGL package to access it
> for such a long time. It would be nice if someone looked more closely
> if we can in fact add appropriate as<>() and wrap() methods/functions
> to make interfacing this library more easy / more accessible from R.
>
> Dirk
>
> --
> Dirk Eddelbuettel | [email protected] | http://dirk.eddelbuettel.com
> _______________________________________________
> Rcpp-devel mailing list
> [email protected]
> https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-deve
> l
_______________________________________________
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