0

I'm new for Rcpp, and in my code, I need use the R function optim in Rcpparmadillo. I referred to the example what I was trying. I read the very similar question in Calling R's optim function from within C++ using Rcpp, but it is quite different in that there are other variables x and y. That is, I need to optimize the function with respect to b but it depends on variables x and y.

Hear's the code that I am trying.

#include <RcppArmadillo.h>
using namespace arma;
using namespace Rcpp;

// [[Rcpp::depends(RcppArmadillo)]]

// [[Rcpp::export]]
vec fr(vec b, vec x, double y){
  vec a1 = b.t()*x- y;
  return a1;  
} 

// [[Rcpp::export]]
vec optim_rcpp(const vec& init_val, vec x, double y){

  Rcpp::Environment stats("package:stats"); 
  Rcpp::Function optim = stats["optim"];    

  Rcpp::List opt_results = optim(Rcpp::_["par"]    = init_val,
                                 Rcpp::_["fn"]     = Rcpp::InternalFunction(&fr(init_val,x,y)),
                                 Rcpp::_["method"] = "BFGS");

  vec out = Rcpp::as<vec>(opt_results[0]);

  return out;
}

or

// [[Rcpp::export]]
    vec optim_rcpp(const vec& init_val, vec x, double y){

      Rcpp::Environment stats("package:stats"); 
      Rcpp::Function optim = stats["optim"];    

      Rcpp::List opt_results = optim(Rcpp::_["par"]    = init_val,
                                     Rcpp::_["fn"]     = Rcpp::InternalFunction(&fr),
                                     Rcpp::_["method"] = "BFGS");

      vec out = Rcpp::as<vec>(opt_results[0]);

      return out;
    }

Please give me any comment! Thank you!

0 Answers0