下午好,
x[200:300]
在使用 Rcpp 时,我一直在尝试使用与 R 中的子集类似的方法。(注意,这不是我要解决的问题,但我需要在我试图用 C++ 编写的函数中对许多范围进行子集化,我发现这是我性能的瓶颈)
然而,尽管我尝试过使用 rcpp 中的方法、使用迭代器或其他东西,但我似乎没有找到一个最低限度“快速”的解决方案。我发现的大多数解决方案都很慢。
并且查看 Rcpp 的参考,我似乎找不到任何东西,我在 StackExchange 中找不到它。
我知道这段代码现在很丑……但我一无所知
// [[Rcpp::export]]
StringVector range_test_( StringVector& x, int i, int j){
StringVector vect(x.begin()+i, x.begin()+j);
return vect;
}
然后,它慢了 800 倍。我一直试图x[i:j]
在 rcpp 基础中找到与 R 相同的功能,它非常快......但我找不到它。
tests_range <- rbenchmark::benchmark(
x[200:3000],
range_test_(x, 200, 3000),
order = NULL,
replications = 80
)[,1:4]
结果给出
test replications elapsed relative
1 x[200:3000] 80 0.001 1
3 range_test_(x, 200, 3000) 80 0.822 822
如果有人知道如何x[i:j]
在 Rcpp 中快速访问子集功能或其他东西,我将不胜感激。我似乎无法找到我缺少的工具。