缓存Rcpp对象中的中间结果

时间:2013-05-16 11:04:11

标签: r rcpp

我目前正在尝试加速使用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 ++方面”的中间数据)?

提前致谢。

1 个答案:

答案 0 :(得分:1)

是的,正如你所说的那样可以将“中间数据”保存在“C ++端”,但这更像是一个C ++程序设计问题,而不是Rcpp所特有的。

使用私有状态数据创建一个类,使用函数创建类对象,然后在迭代期间更新它。

Rcpp将有助于轻松调用这些成员函数,但它不会为您创建框架的其余部分。