Disordered indices with the disordR package: an introduction to class disindex

Experimental S4 class disindex allows extraction methods, including list extraction, to operate with the output of which(). Consider the following R session:

library("disordR")
(d <- disord(c(4,6,1,2,3,4,5,1)))
## A disord object with hash cdcfc3c32c35002138f5ff242f5701783e4ad73f and elements
## [1] 4 6 1 2 3 4 5 1
## (in some order)
ind <- which(d>4)

Above, object ind points to those elements of d which exceed 4. Thus:

d
## A disord object with hash cdcfc3c32c35002138f5ff242f5701783e4ad73f and elements
## [1] 4 6 1 2 3 4 5 1
## (in some order)
d[ind]
## A disord object with hash aa9a76b3212ca0935b397b70e155f52e4eebc43f and elements
## [1] 6 5
## (in some order)
d[ind] <- 99
d
## A disord object with hash ec208b346c4ea47134b6c9b510692adfbebc93f6 and elements
## [1]  4 99  1  2  3  4 99  1
## (in some order)

However, we cannot assert that ind is elements 2 and 7 of d, for the elements of d are stored in an implementation-specific order. If we examine ind directly, we see:

ind
## A disind object with hash cdcfc3c32c35002138f5ff242f5701783e4ad73f and 2 (implementation-specific) elements

which correctly says that the elements of ind are implementation-specific. However, the main application of disindex objects is for list extraction.

d <- disord(c(4,1,6,2))
dl <- sapply(d,function(x){seq(from=5,to=x)})
dl
## A disord object with hash 836b93030b8d8cacdd6cfefaa8b97d5ee6a3d86f and elements
## [[1]]
## [1] 5 4
## 
## [[2]]
## [1] 5 4 3 2 1
## 
## [[3]]
## [1] 5 6
## 
## [[4]]
## [1] 5 4 3 2
## 
## (in some order)

Suppose I wish to extract from object dl just the element with the longest length. Noting that this would be a disord-compliant question, we would use:

howlong <- unlist(lapply(dl,length))
longest <- which(howlong == max(howlong))
dl[[longest]]
## [1] 5 4 3 2 1