r - 为什么排序比 R 中的排序函数慢?

标签 r sorting microbenchmark

一切都在标题中。我希望 order用途 sort找出向量中值的顺序。因此sort应该比 order 快对向量进行排序,但情况并非如此:

library(microbenchmark)
ss=sample(100,10000,replace=T)
microbenchmark(sort(ss))
microbenchmark(ss[order(ss)])
结果:
> microbenchmark(sort(ss))
Unit: microseconds
    expr     min       lq     mean  median       uq      max neval
 sort(ss) 141.535 144.6415 173.6581 146.358 150.2295 2531.762   100
> microbenchmark(ss[order(ss)])
Unit: microseconds
        expr     min       lq     mean  median       uq     max neval
 ss[order(ss)] 109.198 110.9865 115.6275 111.901 115.3655 197.204   100
具有更大向量的示例:
ss=sample(100,1e8,replace=T)
microbenchmark(sort(ss), ss[order(ss)], times = 5)
# Unit: seconds
#           expr      min       lq     mean   median       uq      max neval
#       sort(ss) 5.427966 5.431971 5.892629 6.049515 6.207060 6.346633     5
#  ss[order(ss)] 3.381253 3.500134 3.562048 3.518079 3.625778 3.784997     5

最佳答案

因为 sort.default()用途 order (而不是相反)。

function (x, decreasing = FALSE, na.last = NA, ...) 
{
  if (is.object(x)) 
    x[order(x, na.last = na.last, decreasing = decreasing)]
  else sort.int(x, na.last = na.last, decreasing = decreasing, 
    ...)
}
sort必须确定它的方法,然后执行相同的 x[order(x)]当您使用 x[order(x)] 时,调用您正在一步执行直接地。您可以根据需要增加输入的大小。对于整数向量,x[order(x)]应该总是跑赢sort(x) .

@Hugh's answer一年后表明,大部分差异在于 NA 的默认处理方式。值。这应该是这里公认的答案。

关于r - 为什么排序比 R 中的排序函数慢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50954421/

相关文章:

jquery - 如何通过下拉列表的更改根据数据属性对 div 进行排序

c++ - 简单的for()循环基准测试与任何循环绑定(bind)都花费相同的时间

Java并行流性能

rmcorr : Pass column name with variable

r - 在 x 轴上的离散组之间添加刻度

r - 从 rpart 包中的决策规则中提取信息

java - 通过类变量调用时,Java 9 中的 Class.cast 和 Class.isInstance 方法实际上是固有的吗?

RStudio、Packrat 和 Knir

java - 如何在 Java 8 中对 List<Object> 进行排序

javascript - 如何使用 Javascript Underscore.js 的 _.sortBy() 方法在 javascript 中按多个键对对象数组进行排序?