Short hand if-else functions for simple values switching.
(function
)
to be applied on ...
. Must return single logical value.
arguments passed to the .f
.
A positive-replacement. NOTE, that if .then
is not specified
directly by named argument then the first argument from ...
will
be taken.
A negative-replacement. NOTE, that if .else
is not specified
directly by named argument then the last argument from ...
will
be considered as a replacement.
object identical to .then
or .else
depending on the condition
result.
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)
.
# if (is.null(NULL)) NULL else 1
ox(NULL, .f = is.null, .else = 1)
#> NULL
# if (is("text", "character")) "text" else "not a character"
ox("text", .f = is, "character", .else = "not a character")
#> [1] "text"
# if (1 > 2) 1 else 2
ox(`>`, 1, 2)
#> [1] 2
# if (!is.null(NULL)) NULL else 1
xo(NULL, .f = is.null, .else = 1)
#> [1] 1
# if (!is("text", "character")) "text" else "not a character"
xo("text", .f = is, "character", .else = "not a character")
#> [1] "not a character"
# if (!1 > 2) 1 else 2
xo(`>`, 1, 2)
#> [1] 1