2016-07-30 59 views
0

我想在列表的列表中執行什麼是Rcpp中有效的並行lapply,有效地從列表中移除元素並使用它們進行計算。 基本上做什麼Rcpp並行,但與列表,而不是數字向量。在Rcpp中,如果通過數字索引完成,則會獲取/設置線程安全列表元素?訪問/設置Rcpp :: List線程中的元素是否安全?

因爲我想下面要做的事情型

僞代碼:

List original = // created somewhere else, 
List results = List(original.size()); 

// Is this function thread safe? 
auto func = [original&, results&](int i) { 
    List data = original[i]; 
    // Calculate a new List, stuff 
    results[i] = stuff; 
}; 

```

回答

3

你問

在RCPP越來越/設置列表元素線程安全如果通過數字索引完成?

,答案是(一般)堅定的「不」,因爲(給予或採取)什麼關於R和R的數據結構是。

查看使用的OpenMP的有R寫現有製成品,包括Writing R Extensions - 這斷然指出在第1.2.1.1該

調用從任何線程代碼將R API的是「只有專家:他們將需要閱讀源代碼以確定它是否是線程安全的。特別是,不能使用線程代碼調用使用堆棧檢查機制的代碼。

另請參閱我們的Rcpp Gallery on OpenMP以及RcppParallel的精美文檔及其示例。