加快一个奇怪的慢速Rcpp功能

时间:2015-05-07 15:30:01

标签: r rcpp

我想用Rcpp重写一个昂贵的R函数。由于我是这个主题的新手,我尝试了一些非常简单的东西。 我写了以下函数:

Rcpp::cppFunction('
  std::vector<int> test_C(double a) {
    std::vector<int> indices;
    indices.reserve(2);
    indices.push_back(a);
    indices.push_back(a);
    return (indices);
  }
')

现在这对结果很有效。但这需要0.1秒(对于这项任务当然太过分了)。以前我有

Rcpp::cppFunction('
  NumericVector test_C(double a) {
    NumericVector indices(2);
    indices[0] = a;
    indices[1] = a;
    return (indices);
  }
')

同样慢。我怀疑这是我的系统故障。我在R: Getting indices of elements in a sorted vector的答案中尝试了Rcpp代码来计算哪个[v&gt; a] [1]用于数值向量v(在我的测试中长度为10e7)和双倍a并且它的工作速度非常快。

任何提示我做错了什么?

1 个答案:

答案 0 :(得分:3)

您是否偶然测量编辑?

R> library(rbenchmark)
R> benchmark(test_C(2))[1:4]
       test replications elapsed relative
1 test_C(2)          100   0.001        1
R>