| misc | R Documentation |
This page documents various functions that work for disords, and I will
add to these from time to time as I add new functions that make sense
for disord objects (or identify functions that break disord discipline).
Functions like sin() and abs() work as expected: they take
and return disord objects with the same hash as x (which
means that idiom like x + sin(x) is accepted). However, there
are a few functions that are a little more involved:
rev() reverses its argument and returns a disord
object with a reversed hash, which ensures that rev(rev(x))==x
(and the two are consistent).
sort() returns a vector of sorted elements (not a
disord)
length() returns the length of the data component of the
object
sapply(X,f) returns a disord object which is the result of
applying f() to each element of X.
match(x,table) should behave as expected but note that if
table is a disord, the result is not defined (because it
is not known where the elements of x occur in table).
Nevertheless x %in% table is defined and returns a
disord object.
lapply(x,f) returns
disord(lapply(elements(x),f,...),h=hash(x)). Note that double
square bracket extraction, as in x[[i]], is disallowed (see
extract.Rd).
which() returns a disind object when given a
Boolean disord
unlist() takes a disord list, flattens it and
returns a disord vector. It requires the recursive flag
of base::unlist() to be TRUE, which it is by default,
interpreting this to mean “kill all the structure in any
sublists”. If the list comprises only length-one vectors, the
returned value retains the same hash as the argument; if not, a new
hash is generated.
diff() is undefined for disord objects.
rbind() and cbind() are undefined for disord
objects as they break disord discipline. Function binder()
returns a generic, and hopefully informative, error message [the
package defines methods for rbind2() and cbind2()]
jitter() takes a disord object, jitters the
elements, and returns a disord object with the correct hash
code.
x |
Object of class |
Returns a disord
Some functionality is not yet implemented. Factors, lists, and named
vectors do not behave entirely consistently in the package;
paste() gives inconsistent results when called with disords.
Also, for() loops are incompatible with disord discipline, as
they impose an ordering (for() accesses the .Data slot of
its argument, which is a regular R vector). Thus:
> (a <- disord(1:3))
A disord object with hash 555f6bea49e58a2c2541060a21c2d4f9078c3086 and elements
[1] 1 2 3
(in some order)
> for(i in a){print(i)}
[1] 1
[1] 2
[1] 3
>
Above, we see that for() uses the ordering of the .Data
slot of S4 object a, even though elements() has
not been explicitly called.
Robin K. S. Hankin
extract
a <- disord(c(a=1,b=2,c=7))
a
names(a)
length(a)
sqrt(a)
# powers() and vars() in the mvp package return lists; see the vignette
# for more discussion.
l <- disord(list(3,6:9,1:10))
sapply(l,length)
unlist(l)
## Quick illustration of rev():
revstring <- function(s){paste(rev(unlist(strsplit(s, NULL))),collapse="")}
x <- rdis()
revstring(hash(x)) == hash(rev(x))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.