Rcpp - 使用optim函数

时间:2018-05-08 21:16:53

标签: c++ r

如何使用R语言的varargs函数,就像optim函数一样?

考虑下面的代码,我想最大化对数似然函数verossimilhanca

#include <Rcpp.h>
#include <RInside.h>

using namespace Rcpp;

// [[Rcpp::export]]

double verossimilhanca(Function pdf, NumericVector par, NumericVector x){
  NumericVector log_result = log(pdf(par,x));
  double soma =0;
  for(int i = 0; i < log_result.size(); i++){
    soma += log_result[i];
  }

  return -1*soma;
} 
// [[Rcpp::export]]
List bootC(NumericVector x, NumericVector init_val){ 
  Rcpp::Environment stats("package:stats"); 
  Rcpp::Function optim = stats["optim"];    

  R["my_objective_fn"] = Rcpp::InternalFunction(&verossimilhanca);

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

  return opt_results;
  // x is a data vetor.
}

总之,我有一个对数似然函数,我想最大化这个函数,x是我的数据集。我知道RInside允许我在C ++中创建R的实例,但我想只使用Rcpp.h库来解决这个问题而不诉诸RInside.h

1 个答案:

答案 0 :(得分:0)

在优化函数的参数中将x替换为Rcpp::_["x"] = x。 直到我找到the answer of @coatless为止,这也困扰着我。