我目前正在尝试加速使用 Rcpp 计算目标函数的优化过程。我当前的设置与此类似:
largeConstantVector <- readVector()
result <- optim(..., eval=function(par) evalRcpp(par, largeConstantVector))
和evalRcpp
功能
double evalRcpp(NumericVector par, NumericVector constVector){
NumericVector parT = transform(par)
NumericVector constVectorT = transform(constVector)
return aggregate(parT, constVectorT)
}
我想做的是NumericVector constVectorT = transform(constVector)
只计算一次并将结果保存在 C++ 对象中,并且只在 R 端使用对该对象的引用。所以程序类似于这样:
largeConstantVector <- readVector()
objReference <- calculateCommonStuff(largeConstantVector)
result <- optim(..., eval=function(par) evalRcpp(par, objReference))
和evalRcpp
功能
double evalRcpp(NumericVector par, const SomeClass& objRef){
NumericVector parT = transform(par)
NumericVector constVectorT = objRef.constVectorT
return aggregate(parT, constVectorT)
}
使用 Rcpp 可以实现这种方法吗?是否可以防止不必要的计算和数据复制(即在“C++ 端”保留迭代数据)?
提前致谢。