| Ops.rle | R Documentation |
rle ObjectsUnary and binary Arithmetic and Logic operators (with
exceptions given below) are implemented between two rle objects
and between an rle object and a scalar.
## S3 method for class 'rle'
Ops(e1, e2)
e1, e2 |
Arguments to unary ( |
Supported operations include all elements of the Ops
group, as well as xor. Within the Arithmetic and Logic
operators, this includes (taken from the R help): +, -, *,
/, ^, < , >, <=, >=, !=, ==, %%, %/%, &,
|, !, and xor; but excludes non-vector logical functions
and operators such as isTRUE and &&.
In every supported case, the operation should result in an
rle that would have resulted had the operation been applied
to the original (uncompressed) vectors, then compressed using
rle, with the proviso that if the resulting function creates
adjacent runs of the same value, they are not merged. This must
be done explicitly with compress.rle. (At no point in the
calculation are the uncompressed vectors actually constructed, of
course.)
An operation between an rle and a zero-length object produces
an empty rle.
x <- rle(as.logical(rbinom(10,1,.7)))
y <- rle(as.logical(rbinom(10,1,.3)))
stopifnot(isTRUE(all.equal((!inverse.rle(x)),inverse.rle(!x))))
stopifnot(isTRUE(all.equal((inverse.rle(x)|inverse.rle(y)),inverse.rle(x|y))))
stopifnot(isTRUE(all.equal((inverse.rle(x)&inverse.rle(y)),inverse.rle(x&y))))
x <- rle(sample(c(-1,+1), 10, c(.7,.3), replace=TRUE))
y <- rle(sample(c(-1,+1), 10, c(.3,.7), replace=TRUE))
stopifnot(isTRUE(all.equal((inverse.rle(x)*inverse.rle(y)),inverse.rle(x*y))))
stopifnot(isTRUE(all.equal((2*inverse.rle(y)),inverse.rle(2*y))))
stopifnot(isTRUE(all.equal((inverse.rle(x)*2),inverse.rle(x*2))))
stopifnot(isTRUE(all.equal((inverse.rle(x)/inverse.rle(y)),inverse.rle(x/y))))
stopifnot(isTRUE(all.equal((2/inverse.rle(y)),inverse.rle(2/y))))
stopifnot(isTRUE(all.equal((inverse.rle(x)/2),inverse.rle(x/2))))
stopifnot(isTRUE(all.equal((-inverse.rle(y)),inverse.rle(-y))))
stopifnot(isTRUE(all.equal((inverse.rle(x)-inverse.rle(y)),inverse.rle(x-y))))
stopifnot(isTRUE(all.equal((inverse.rle(x)%/%inverse.rle(y)),inverse.rle(x%/%y))))
stopifnot(isTRUE(all.equal(inverse.rle(x)==inverse.rle(y),inverse.rle(x==y))))
stopifnot(isTRUE(all.equal((inverse.rle(x)>inverse.rle(y)),inverse.rle(x>y))))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.