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
TRUE
returns.then
.on
FALSE
returns.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)