| ox {ox} | R Documentation |
Short hand if-else
Description
Short hand if-else functions for simple values switching.
Usage
ox(.f, ..., .then = list(...)[[1]], .else = rev(list(...))[[1]])
xo(.f, ..., .then = list(...)[[1]], .else = rev(list(...))[[1]])
Arguments
.f |
( |
... |
arguments passed to the |
.then |
A positive-replacement. NOTE, that if |
.else |
A negative-replacement. NOTE, that if |
Details
ox evaluates function .f which returns a single logical value and
depending on the result ox returns:
on
TRUEreturns.then.on
FALSEreturns.else.
It's important to note is that .then and .else have a default values set
as the first and the last element of the .... This means that they don't
have to be specified if both are arguments of .f.
If any of them are not arguments of .f then this argument should be
specified directly as .then or .else, otherwise it will be passed to the
function.
As, far as .then and .else won't be specified order of arguments in ...
matters for ox but it's up to you if they are passed in the correct order
to the .f. Then one, might consider name the argument so .f will be
executed as expected. Consider following example
greater_than_by <- function(x, y, by) x > (y + by) ox(greater_than_by, x = 5, by = 3, y = 3)
In above, one needs to move y to the end so that it will be considered as
.else.
To invert the switch one can use xo which is equivalent of
ox(Negate(.f), ..., .then, .else).
Value
object identical to .then or .else depending on the condition
result.
Examples
# if (is.null(NULL)) NULL else 1
ox(NULL, .f = is.null, .else = 1)
# if (is("text", "character")) "text" else "not a character"
ox("text", .f = is, "character", .else = "not a character")
# if (1 > 2) 1 else 2
ox(`>`, 1, 2)
# if (!is.null(NULL)) NULL else 1
xo(NULL, .f = is.null, .else = 1)
# if (!is("text", "character")) "text" else "not a character"
xo("text", .f = is, "character", .else = "not a character")
# if (!1 > 2) 1 else 2
xo(`>`, 1, 2)