在Rcpparmadillo中使用R optim函数

时间:2018-02-04 07:59:41

标签: c++ r rcpp armadillo

我是Rcpp的新用户,在我的代码中,我需要在Rcpparmadillo中使用R函数optim。我提到了我正在尝试的例子。我在Calling R's optim function from within C++ using Rcpp中阅读了非常相似的问题,但它有很大不同,因为还有其他变量xy。也就是说,我需要针对b优化函数,但它取决于变量xy

听到我正在尝试的代码。

#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;
}

// [[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;
    }

请给我任何评论!谢谢!

0 个答案:

没有答案