order2: Ordering vectors In cvarrichio/algor: Alternative Implementations of Base R Functions

Description

Simplified implementation of `order`. For large vectors, typically is about 3x faster for numbers and 20x faster for characters.

Usage

 `1` ```order2(x) ```

Arguments

 `x` a vector of class numeric, integer, character, factor, or logical. Long vectors are not supported.

Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59``` ```chars<-as.character(sample(1e3,1e4,TRUE)) system.time(a<-order(chars)) system.time(b<-order2(chars)) identical(chars[a],chars[b]) ints<-as.integer(sample(1e3,1e4,TRUE)) system.time(a<-order(ints)) system.time(b<-order2(ints)) identical(ints[a],ints[b]) nums<-runif(1e4) system.time(a<-order(nums)) system.time(b<-order2(nums)) identical(nums[a],nums[b]) logs<-as.logical(sample(0:1,1e6,TRUE)) system.time(a<-order(logs)) system.time(b<-order2(logs)) identical(logs[a],logs[b]) facts<-as.factor(as.character(sample(1e3,1e4,TRUE))) system.time(a<-order(facts)) system.time(b<-order2(facts)) identical(facts[a],facts[b]) #How are special values like NA and Inf handled? #For numerics, values sort intuitively, with the important note that NA and #NaN will come after all real numbers but before Inf. (function (x) x[order2(x)])(c(1,2,NA,NaN,Inf,-Inf)) #For characters, values sort correctly with NA at the end. (function (x) x[order2(x)])(c('C','B',NA,'A')) #For factors, values sort correctly with NA at the end. (function (x) x[order2(x)])(as.factor(c('C','B',NA,'A'))) ## Not run: chars<-as.character(sample(1e5,1e6,TRUE)) system.time(a<-order(chars)) system.time(b<-order2(chars)) ints<-as.integer(sample(1e5,1e6,TRUE)) system.time(result<-order(ints)) system.time(result<-order2(ints)) nums<-runif(1e6) system.time(result<-order(nums)) system.time(result<-order2(nums)) logs<-as.logical(sample(0:1,1e7,TRUE)) system.time(result<-order(logs)) system.time(result<-order2(logs)) facts<-as.factor(as.character(sample(1e5,1e6,TRUE))) system.time(a<-order(facts)) system.time(b<-order2(facts)) identical(facts[a],facts[b]) ## End(Not run) ```

cvarrichio/algor documentation built on May 12, 2017, 2:22 p.m.