由於昨晚我一直在嘗試Rcpp
和inline
,到目前爲止我非常享受它。但我一般對C
有點新,只能做基本的東西,而且我很難在網上找到像函數這樣的東西。在Rcpp中查找最小矢量
我正在研究的是一個函數,它可以在全局環境中找到一個向量的最小值。我想出了:
library("inline")
library("Rcpp")
foo <- rnorm(100)
bar <- cxxfunction(signature(),
'
Environment e = Environment::global_env();
NumericVector foo = e["foo"];
int min;
for (int i = 0; i < foo.size(); i++)
{
if (foo[i] < foo[min]) min = i;
}
return wrap(min+1);
', plugin = "Rcpp")
bar()
但好像應該有這樣做的更簡單的方法,它比which.max()
system.time(replicate(100000,bar()))
user system elapsed
0.27 0.00 0.26
system.time(replicate(100000,which.min(foo)))
user system elapsed
0.2 0.0 0.2
我俯瞰基本c++
或Rcpp
功能相當慢於做這個?如果是這樣,我可以在哪裏找到這樣的功能列表?
我想這個問題是關於: Where can I learn how to write C code to speed up slow R functions?
,但在不同的我不是在如何R
納入c++
很感興趣,但更多的是如何以及在哪裏學習基本c++
代碼是可用R
。
我非常懷疑你會加快使用C++的最小和最大操作速度 - 這些可能已經在R中使用(快速)SSE指令來實現。另外,從C++到R的過渡並不是免費的。 – 2011-03-01 17:57:52
我意識到,這更多是指概念,這是我試圖在R中實現的一個更大的C++函數的一部分。 – 2011-03-01 18:17:21