2013-04-13 20 views
1

我有一個函數嵌套在R中的另一個函數中。由於較深的函數有點慢,我決定使用sourceCpp交換一些編譯代碼。但是,該內部函數使用外部函數中定義的變量。在R我使用環境。什麼是C++類比?我必須使用extern關鍵字嗎?會有這樣的工作嗎?C++函數中的變量作用域通過R與sourceCpp調用

#include <Rcpp.h> 

using namespace Rcpp; 

// [[Rcpp::export]] 
arma::mat myFunc(arma::mat a, arma::mat b){ 
    extern arma::mat c; 
    return a + b + c; 
} 
+1

在R代碼中這樣做已經不是個好主意了,所以不要在C++代碼中這樣做。你可以像Dirk說的那樣通過一個環境或者找到一個聰明的方式來展開你的C++函數中的框架,但是我沒有展示它。 –

+0

只需顯式地將需要的變量傳遞給該函數:R在_modified_時複製它們,而不是函數調用時的複製 – hadley

+0

如果我正在使用optim(initial.par,Linn(),...) Linn()通常依賴於不在本地範圍內的變量。 – Taylor

回答

0

你可以通過Rcpp傳遞R環境到C++;並在這裏和其他地方的文檔中存在示例。然而,只要隨意在裏面扔一個C++ extern,就可以訪問一個環境。

+0

因此,從這裏選擇外部環境中的元素? http://stackoverflow.com/questions/3671862/read-variables-from-global-environment-with-inline-rcpp – Taylor