Rcpp - 使用最优函数

Rcpp - Using the optim function

本文关键字:函数 Rcpp      更新时间:2023-10-16

如何使用 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

在 optim 函数的参数中将x替换为Rcpp::_["x"] = x。 在我找到@coatless的答案之前,这也困扰着我。