R: Sorting vectors

sort2 {grr} | R Documentation

## Sorting vectors

### Description

Simplified implementation of `sort`. For large vectors, typically is about 2x faster for numbers and 20x faster for characters and factors.

### Usage

    sort2(x)

### Arguments

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

### Examples

    chars<-as.character(sample(1e3,1e4,TRUE))
    system.time(a<-sort(chars))
    system.time(b<-sort2(chars))
    identical(a,b)

    ints<-as.integer(sample(1e3,1e4,TRUE))
    system.time(a<-sort(ints))
    system.time(b<-sort2(ints))
    identical(a,b)

    nums<-runif(1e4)
    system.time(a<-sort(nums))
    system.time(b<-sort2(nums))
    identical(a,b)

    logs<-as.logical(sample(0:1,1e6,TRUE))
    system.time(result<-sort(logs))
    system.time(result<-sort2(logs))

    facts<-as.factor(as.character(sample(1e3,1e4,TRUE)))
    system.time(a<-sort(facts))
    system.time(b<-sort2(facts))
    identical(a,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.
    sort2(c(1,2,NA,NaN,Inf,-Inf))
    #For characters, values sort correctly with NA at the end.
    sort2(c('C','B',NA,'A'))
    #For factors, values sort correctly with NA at the end
    sort2(as.factor(c('C','B',NA,'A')))

    ## Not run:
    chars<-as.character(sample(1e5,1e6,TRUE))
    system.time(a<-sort(chars))
    system.time(b<-sort2(chars))

    ints<-as.integer(sample(1e5,1e6,TRUE))
    system.time(result<-sort(ints))
    system.time(result<-sort2(ints))

    nums<-runif(1e6)
    system.time(result<-sort(nums))
    system.time(result<-sort2(nums))

    logs<-as.logical(sample(0:1,1e7,TRUE))
    system.time(result<-sort(logs))
    system.time(result<-sort2(logs))

    facts<-as.factor(as.character(sample(1e5,1e6,TRUE)))
    system.time(a<-sort(facts))
    system.time(b<-sort2(facts))

    ## End(Not run)

[Package grr version 0.9.5 Index]