2011-03-18 84 views
3

我一直在使用Rcpp和RInside來集成RC++。我們有一個複雜但精心設計的C++架構,我發現很難從1個函數中訪問R.是否有可能將R實例傳遞給不同的類/函數,以獲得更多的OOP設計?如果是的話,有沒有例子?通過RInside的'R'實例作爲類/方法之間的參數

爲了詳細查詢, 我想說的是,這樣的事情,

void foo(RInside& R0, int& x0) 
{ 
R0.assign(x0,"totalSum"); 
} 
void foo2(RInside& R0, int& y0) 
{ 
    R0.assign(y0,"temp"); 
    R0.parseEvalQ("totalSum = totalSum + temp"); 
} 
int main(int argc, char *argv[]) 
{ 
    RInside R(int argc, char *argv[]); 
    int x=10, y = 11; 
    foo(R,x); 
    foo2(R,y); 
    return 0; 
} 

什麼我現在注意到的是,每次調用FOO,可能造成RInside的新實例。

謝謝 - 埃貢

+0

不,它不會創建一個例如。你正在做正確的事(TM),你可以告訴我看,例如,在'top'或'htop'看看有多少個R進程產生(一個),以及你是否看到新的進程id(不,你不知道)。 – 2011-03-18 21:30:23

回答

5

是的,正如我先前寫信給rcpp-devel list(如果你關心RCPP和RInside你應該遵循),我只是說一個例子來RInside中嵌入它裏面Qt

我instantiante R在main()然後傳遞給這個對象使用它的類的引用。這似乎是一個合適的模型,因爲我們需要確保只有一個R實例運行(其中R不是多線程等等---如果你需要更多的情況下,考慮Rserve

這個例子是now in SVN,看起來像這樣在我的盒子:

enter image description here

我很喜歡它,因爲它可以讓你玩的混合物,傳播中心位置的兩繪製等,並瞭解哪些帶寬您估計密度的兩個駝峯之間不再區分。