2012-11-16 51 views
3

我有天真的問題要問:C和R之間的相互作用

1)當我想在R中調用C時,我必須寫一些C代碼。但是有時我必須調用一個由R寫成的函數,我可以在C函數中調用該函數嗎? 2)如果1)是可行的,那麼如果我使用一個循環寫入R的函數1000次,這是否會使用C調用此函數來加速循環?

回答

5

那麼提出問題。快速拍攝:

  1. 是的,你可以。它是(因爲這麼多的事情)可能還與基於C的API是R提供了一個有點乏味 - 但(在我們看來至少)多與我們通過Rcpp

  2. 放在上面的C++層容易些是關鍵點。如果R代碼是瓶頸,那麼當您從C或C++調用它作爲時,它仍然是瓶頸,從調用它並不重要。重要的是它的相對速度。

rcpp-devel列表(鏈接在Rcpp page)有很多相關的討論;你也可以在[rcpp]標籤下的SO上找到很多。

+0

那麼基本上如果人們想要獲得速度,他們將不會在R函數中調用他們想要調用的C函數中的R函數,對吧?下面是下一個問題:在C中進行矩陣運算是否乏味?並會在C快? –

+0

我通常建議的是(如果您必須)調用一個或幾個R函數來替換硬和繁瑣的任務 - 並專注於用C++核心替換您的計算的「核心」部分。 Rcpp使這種方法變得非常簡單,我們獲得了非常好的速度提升。 –

+0

是的,是的:繁瑣而快速。看看RcppArmadillo,雖然:易於使用,有據可查,仍然*非常快*。我有很多博客文章和Google應該爲您找到的示例。 –