Hello, <br><br>Many thanks to Dirk for the quick and helpful answer. Rcpp is a
 great project, really! Yet, I've been struggling a bit,
trying to find what what functionality is there. <br><br>If I search for NumericVector::create method in the reference site (<a href="http://dirk.eddelbuettel.com/code/rcpp/html/classMatrix.html" target="_blank">http://dirk.eddelbuettel.com/code/rcpp/html/classMatrix.html</a>),
 I only find create(void). That's also what my IDE suggests (I'm 
currently using QT Creator on Ubuntu 12.04). However, I happen to find 
an example like that one:<br>
<br>IntegerVector v = IntegerVector::create(0,1,NA_INTEGER,3);<br><div><br>Than
 I realize, that there is some generated source-code that is included 
within the class definition for Vector. It turns out that, both the 
reference-site generator and my IDE didn't understand the Vector class 
definition :(. Fortunately, g++ understands everything. <br>
<br>I suppose, Eclipse would have understood this, because it's 
intellisense engine seems to evaluate the macros in real-time, but I 
abandoned Eclipse, because it apparently ignores statements like "using 
namespace std/Rcpp;", so I got compilation errors on code which compiles
 smoothly using command-line g++.  <br>
<br>Also, I did the long way of searching/installing many IDE-oriented 
plug-ins for VIM (the best one for autocompletion I've found is 
clang-complete, yet it is far from perfect). <br><br><span style="color:rgb(153,0,0)">Do you have an IDE to recommend for Ubuntu?</span> Although the question is not directly related to Rcpp, knowing its answer might greatly facilitate the work with Rcpp as well. <br>


<br>Now back to sugar and RcppArmadillo. I have the following code:<br><br> using namespace Rcpp;<br> using namespace sugar;<br> using namespace alglib;<br><br>arma::mat momentcov_arma(const arma::vec& U, const arma::vec& V) {<br>

        arma::vec S = moments_arma(U,V); // some c++ funtion returning a vector...
<div class="im"><br>
        arma::vec Y = V - mean(V);      // If it's getting long, stop reading and see question below: <br>        arma::vec X = U - mean(U);<br>        std::size_t len = S.n_elem;<br><br>        arma::mat M(len, len);<br>
</div>

        M(0,0) = mean((X%X)%(Y%Y));<br>
        M(1,1) = mean((X%X%X%X)%(Y%Y));  <span style="color:rgb(153,0,0)">// Is the bold expression using * operators defined in Armadillo or * operator defined in Sugar?</span><br>
        M(2,2) = mean(X%X%(Y%Y%Y%Y));<br>

        return M-S*trans(S);<br>
    }<br>
<br><br><span style="color:rgb(153,0,0)">Question:</span>
 according to QT Creator the line in bold-style will call sugar::mean on
 an arma::vec, is that really possible, and if yes, what are the 
conversions that happen. The code compiles without error using g++ 
compiler.<br><br>By the way, yesterday I 
could run the C++ version of my R-program. I got 100 times speedup! My 
R-code was calling constrOptim on an optimization task with linear 
inequality constraints. I could replace the call to constrOptim with a 
call to the minbleicoptimizer in the alglib library (<a href="http://www.alglib.net/" target="_blank">http://www.alglib.net/</a>). So, the speedup came from:<br>
1) faster control statement evaluation in C++ / Rcpp and RcppSugar /. <br>2)
 about 10 times fewer evaluations of the target function and gradient in
 the minbleicoptimize-call compared to constrOptim call.  <br>3) faster linear algebra expression evaluation with RcppArmadillo.<br>
<br>Best thanks to the authors of all the above-mentioned projects.<br><br>The
 Rcpp-code doesn't look too much different from the R-code. Some 
programming overhead came from the need to write a small "glue" library 
for conversion between alglib::*_1d/2d_array and arma::Vec/Mat. I hope 
this, library can be reused, so I attached its source-code to this mail.
 Feel free to use it and to send me feedback on that one. I wonder if it
 can become more efficient if one uses std::copy/fill instead of 
for-loops...<br>
<br>Cheers, <br>Venelin</div><br><br><div class="gmail_quote">2012/7/16 Dirk Eddelbuettel <span dir="ltr"><<a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a>></span><br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
Hi Venelin,<br>
<br>
Thanks for posting here.<br>
<div><br>
On 16 July 2012 at 19:46, Venelin Mitov wrote:<br>
| Hi,<br>
|<br>
| I am trying to use Rcpp for translating an R program in C++. There seems to be<br>
| some redundancy in the functionality provided by RcppArmadillo and pure Rcpp,<br>
| for example, one can use arma::vec instead of NumericVector and arma::mat<br>
| instead of NumericMatrix. And it is possible to evaluate algebraic expressions<br>
| with both classes. If I understand correctly, RcppArmadillo relies on<br>
| overloaded operators for the arma:: classes (+,-, *...). On the other hand,<br>
| these operations are made possible with NumericMatrix with sugar, right?<br>
<br>
</div>Yes and no. Sugar support is still limited for operations.<br>
<br>
And you do have a choice of two class libraries and interface packages for linear<br>
algebra and more: RcppArmadillo, and RcppEigen.<br>
<div>  <br>
| So my question is: Is there a rule of thumb to choose between one or another<br>
| implementation?<br>
<br>
</div>I tend to use the Armadillo objects whenever I want to do actual linear<br>
algebra, and stick with the Rcpp vector and matrix classes when I just need,<br>
for lack of a better term, "storage containers" to collect data and/or pass<br>
it around to other libraries or functions.<br>
<br>
As for Rcpp and sugar: further contributions would be welcome. But this<br>
requires pretty solid skills with C++ templates...<br>
<br>
Hope this helps!<br>
<br>
Cheers, Dirk<br>
<br>
<br>
|<br>
| Cheers,<br>
| Venelin<br>
|<br>
|<br>
|<br>
| ----------------------------------------------------------------------<br>
| _______________________________________________<br>
| Rcpp-devel mailing list<br>
| <a href="mailto:Rcpp-devel@lists.r-forge.r-project.org" target="_blank">Rcpp-devel@lists.r-forge.r-project.org</a><br>
| <a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br>
<span><font color="#888888">--<br>
Dirk Eddelbuettel | <a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a> | <a href="http://dirk.eddelbuettel.com" target="_blank">http://dirk.eddelbuettel.com</a><br>
</font></span></blockquote></div><br><br clear="all"><br>-- <br>Venelin MITOV<br><br>