假設我有一個像 3.5 這樣的雙精度數,我想找出在現有排序向量中對它進行排序的位置,比如說seq(1, 10),換一種說法,新數字將在向量中采用哪個索引。當然,它位于 3 和 4 之間,因此介于第三和第四個索引之間,但是得到這個結果的最快方法是什么?
uj5u.com熱心網友回復:
如評論中所述,findInterval為此目的最快。即使是在 C 中執行相同操作的非常簡單的回圈,平均速度也會慢一些。
library(Rcpp)
cppFunction("int find_index(double x, NumericVector v) {
int len = v.size();
for(int i = 0; i < len; i) {
if(x <= v[i]) return i 1;
}
return NA_INTEGER;
}")
microbenchmark::microbenchmark(
findInterval = findInterval(453993.5, 1:1000000),
find_index = find_index(453993.5, 1:1000000)
)
#> Unit: milliseconds
#> expr min lq mean median uq max neval
#> findInterval 1.9646 2.1739 2.996931 2.32375 2.4846 37.4218 100
#> find_index 2.2151 2.4502 11.319199 2.60925 2.9800 337.9229 100
uj5u.com熱心網友回復:
像這樣的東西?
首先定義dbl,my_seq
然后將兩者連接并用c(dbl, my_seq)包裝sort
然后用 定義索引which(my_vec == dbl):
dbl <- 3.5
my_seq <- seq(1,10)
my_vec <- sort(c(dbl, my_seq))
index <- which(my_vec == dbl)
index
輸出:
[1] 4
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/425631.html
上一篇:繪制r中資料的統計資訊
下一篇:通過保持串列格式對串列進行子集化
