【发布时间】:2018-03-21 22:48:39
【问题描述】:
下午好,
在使用 Rcpp 时,我一直在尝试使用类似的方法来对 R 中的 x[200:300] 进行子集化。 (注意,这不是我要解决的问题,但我需要在我尝试用 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 倍。我一直在尝试在 rcpp 基础中找到与 R 相同的 x[i:j] 函数,它非常快......但我找不到它。
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 中以同样快的速度访问,我将不胜感激。我似乎无法找到我缺少的工具。
【问题讨论】:
标签: subset rcpp contiguous