transform_if {tinycodet} | R Documentation |
transform_if: Conditional Sub-set Transformation of Atomic objects
Description
The transform_if()
function transforms an object x
,
based on the logical result (TRUE, FALSE, NA
)
of condition function cond(x)
or logical vector cond
,
such that:
For every value where
cond(x)==TRUE
/cond==TRUE
, functionyes(x)
is run or scalaryes
is returned.For every value where
cond(x)==FALSE
/cond==FALSE
, functionno(x)
is run or scalarno
is returned.For every value where
cond(x)==NA
/cond==NA
, functionother(x)
is run or scalarother
is returned.
For a more ifelse
-like function where
yes
, no
, and other
are vectors,
see kit::
iif.
Usage
transform_if(x, cond, yes = function(x) x, no = function(x) x, other = NA)
Arguments
x |
a vector, matrix, or array. |
cond |
either an object of class |
yes |
the (possibly anonymous) transformation function to use
when function |
no |
the (possibly anonymous) transformation function to use
when function |
other |
the (possibly anonymous) transformation function to use
when function |
Details
Be careful with coercion! For example the following code:
x <- c("a", "b") transform_if(x, \(x) x == "a", as.numeric, as.logical)
returns:
[1] NA NA
due to the same character vector being given 2 incompatible classes.
Value
The transformed vector, matrix, or array (attributes are conserved).
See Also
Examples
x <- c(-10:9, NA, NA)
object <- matrix(x, ncol = 2)
attr(object, "helloworld") <- "helloworld"
print(object)
y <- 0
z <- 1000
object |> transform_if(\(x) x > y, log, \(x) x^2, \(x) -z)
object |> transform_if(object > y, log, \(x) x^2, -z) # same as previous line