In this case, I have to ask, 'why'? You want to use C++ to call R functions on R functions? This isn't going to give you any speed benefit, and it's not going to be any better than a base-R solution... if you want an 'apply' framework for matrices, you should roll your own, or consider using each_row or each_col for the arma matrices if your function is simple enough.<div>
<div><div><br></div><div>-Kevin<br><div><div><div><div><div><div>
<div><br><div class="gmail_quote">On Tue, Jan 29, 2013 at 10:29 AM, Honglang Wang <span dir="ltr"><<a href="mailto:wanghonglang2008@gmail.com" target="_blank">wanghonglang2008@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

Dear All,<br>I have a problem, maybe that's trivial to you, but it's really bothering me. How to transfer rama objects and rcpp objects easily? A simple test code is the following:<br>// [[Rcpp::depends(RcppArmadillo)]]<br>


#include <RcppArmadillo.h><br>using namespace Rcpp;<br>// [[Rcpp::export]]<br>double foo(Function f, NumericVector x) {<br>  double r = 0.0;<br>  for (int i=0; i<100; i++)<br>    r += as<double>(f(x));<br>

  return r;<br>
}<br><br>// [[Rcpp::export]]<br>double fpp(Function f, NumericMatrix Ar) {<br>  int n = Ar.nrow(), m = Ar.ncol();<br>  arma::mat A(Ar.begin(),n,m,false);<br>  A.reshape(m,n);<br>  arma::mat U(m,1);<br>  for(int a=0; a<m; a++){<br>


  U(a,1)=foo(f,A.row(a));<br>  }<br>  double r = arma::accu(U);<br>  return r;<br>}<br><br>A <- matrix(rnorm(8),nrow=4)<br>fpp(mean,A)<br><br>In fact, I would like to use apply, a function in R, to replace the for loop in function fpp. But it does not work in the following code:<br>


// [[Rcpp::depends(RcppArmadillo)]]<br>#include <RcppArmadillo.h><br>using namespace Rcpp;<br>// [[Rcpp::export]]<br>List foo(Function f, NumericVector x) {<br>  double r = 0.0;<br>  for (int i=0; i<100; i++)<br>


    r += as<double>(f(x));<br>  return List::create(Named("r") = r);<br><br>}<br><br>// [[Rcpp::export]]<br>double fpp(Function f1, Function f2, NumericMatrix Ar) {<br>  int n = Ar.nrow(), m = Ar.ncol();<br>


  arma::mat A(Ar.begin(),n,m,false);<br>  A.reshape(m,n);<br>  arma::mat U(m,1)=f2(A,1, function(x) foo(f=f1,x)$r);<br>  double r = arma::accu(U);<br>  return r;<br>}<br><br>A <- matrix(rnorm(8),nrow=4)<br>fpp(mean, apply, A)<br>


<br>Anyone can help me out? Thanks a lot?<br clear="all"><div><div>Best wishes!</div><div> </div><div>Honglang Wang</div><div> </div><div>Office C402 Wells Hall</div><div>Department of Statistics and Probability</div><div>


Michigan State University</div><div>1579 I Spartan Village, East Lansing, MI 48823</div><div><a href="mailto:wangho16@msu.edu" target="_blank">wangho16@msu.edu</a></div></div>
<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></blockquote></div><br></div></div>
</div></div></div></div></div></div></div></div>