1
A
回答
6
你可能會想使用類似unordered_set
實施intersect
:
文件myintersect.cpp
:
#include <Rcpp.h>
using namespace Rcpp;
// Enable C++11 via this plugin (Rcpp 0.10.3 or later)
// [[Rcpp::plugins(cpp11)]]
// [[Rcpp::export]]
NumericVector myintersect(NumericVector x, NumericVector y) {
std::vector<double> res;
std::unordered_set<double> s(y.begin(), y.end());
for (int i=0; i < x.size(); ++i) {
auto f = s.find(x[i]);
if (f != s.end()) {
res.push_back(x[i]);
s.erase(f);
}
}
return Rcpp::wrap(res);
}
我們可以加載功能,並驗證它的工作原理:
library(Rcpp)
sourceCpp(file="myintersect.cpp")
set.seed(144)
x <- c(-1, -1, sample(seq(1000000), 10000, replace=T))
y <- c(-1, sample(seq(1000000), 10000, replace=T))
all.equal(intersect(x, y), myintersect(x, y))
# [1] TRUE
然而,看起來這種方法比itersect
功能效率低很多:
library(microbenchmark)
microbenchmark(intersect(x, y), myintersect(x, y))
# Unit: microseconds
# expr min lq median uq max neval
# intersect(x, y) 424.167 495.861 501.919 523.7835 989.997 100
# myintersect(x, y) 1778.609 1798.111 1808.575 1835.1570 2571.426 100
相關問題
- 1. Rcpp功能比相同R功能
- 2. 在R中使用與Rcpp相交
- 3. RCPP功能不能由R
- 4. Rcpp糖的功能列表?
- 5. 交換文本與功能
- 6. 與ABS功能相反
- 7. 與點擊功能相反
- 8. array.indexOf與功能相匹配?
- 9. 內置矩形相交功能?
- 10. 相交但不包含DotSpatial中另一個功能的功能
- 11. SQL Server - 使用計數功能與相交
- 12. 使用與非基元類型的LINQ相交功能
- 13. 相同功能的相同功能
- 14. 交換功能
- 15. 功能提交
- 16. 交錯功能
- 17. 引導拖放與交換功能
- 18. 調用視圖的功能與對話框的功能相同
- 19. 與主功能名稱相同的助手功能?
- 20. 能Mysql的緩存調用相同功能與相同參數
- 21. 相同功能
- 22. 與$ .grep()相同的功能爲$('').filter();
- 23. 是否有與ilmerge相反的功能?
- 24. 功能與使用DAX的SUMIFS相似?
- 25. xslt與日期相關的功能
- 26. Scrum用戶故事與功能相同
- 27. MySql SUM功能與條件相結合
- 28. SeDebugPrivilege()api的功能與System.Diagnostics.Process.EnterDebugMode相同嗎?
- 29. 與Codename one中的HTTPClient功能相同
- 30. UIView的功能與Alertview相似
不錯。 FWIW我們也有一個醜陋的大寫宏給我們'RCPP_UNORDERED_SET',而不考慮編譯器。但通過插件詢問更優雅:) –
好啊! 'std :: tr1 :: unordered_set'不適合我,所以很高興知道'RCPP_UNORDERED_SET'存在。 – josliber
此外,還有糖的功能,例如, 'intersect'已經可用 - 但它返回的輸出順序不同於'R'的'intersect'。 (雖然你得到相同的值) –