2015-05-07 23 views
0

我想用Rcpp重寫一個昂貴的R函數。當我對這個主題不熟悉時,我嘗試了一些非常簡單的東西。 我寫了下面的功能:加速一個奇怪的慢Rcpp函數

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(我的測試中長度爲10e7)的哪個[v> a] [1]和一個double a,它的工作速度非常快。

任何暗示我做錯了什麼?

+1

請包含代碼的R部分。你循環和應用這個函數到你的循環的每個元素?第二個函數在我的系統上運行1微秒,這接近Rcpp函數的微不足道的評估時間。 – BrodieG

+1

我很好奇你爲什麼要用double來填充一個整數向量。 – nrussell

+0

nrussell:哦,沒道理。我改變了它,速度沒有增加。無論如何,NumericVector的版本也很慢。 –

回答

3

您是否偶然測量編譯?

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

它有助於瞭解代碼本身是否正常。謝謝。 –