【发布时间】:2014-06-02 22:05:51
【问题描述】:
我想检查na.locf(来自zoo 包)、rle 和inverse.rle 在RCpp 中是否存在任何预先存在的技巧?
我写了一个循环来实现,例如我对na.locf(x, na.rm=FALSE, fromLast=FALSE)的实现如下:
#include <Rcpp.h>
using namespace Rcpp;
//[[Rcpp::export]]
NumericVector naLocf(NumericVector x) {
int n=x.size();
for (int i=1;i<n;i++) {
if (R_IsNA(x[i]) & !R_IsNA(x[i-1])) {
x[i]=x[i-1];
}
}
return x;
}
我只是想知道,由于这些是非常基本的功能,有人可能已经在RCpp 中以更好的方式(可能是避免循环)或更快的方式实现了它们?
【问题讨论】:
-
在 C++ 代码中循环会很快。请注意,当有人在 R 中编写矢量化代码时,C/C++/FORTRAN 代码中仍然存在您看不到的循环。