setIfNull {MazamaCoreUtils} | R Documentation |
Set a variable to a default value if it is NULL
Description
This function attempts to set a default value for a given target object. If
the object is NULL
, a default value is returned.
When the target object is not NULL
, this function will try and coerce
it to match the type of the default (given by typeof
).
This is useful in situations where we are looking to parse the input as well,
such at looking at elements of an API call string and wanting to set the
character numbers as actual numeric types.
Not all coercions are possible, however, and if the function encounters one
of these (ex: setIfNull("foo", 5)
) the function will fail.
Usage
setIfNull(target, default)
Arguments
target |
Object to test if |
default |
Object to return if |
Value
If target
is not NULL
, then target
is coerced to
the type of default
. Otherwise, default
is returned.
Possible Coercions
This function checks the type of the target and default as given by
typeof
. Specifically, it accounts for the types:
-
character
-
integer
-
double
-
complex
-
logical
-
list
R tries to intelligently coerce types, but some coercions from one type to another won't always be possible. Everything can be turned into a character, but only some character objects can become numeric ("7" can, while "hello" cannot). Some other coercions work, but you will lose information in the process. For example, the double 5.7 can be coerced into an integer, but the decimal portion will be dropped with no rounding. It is important to realize that while it is possible to move between most types, the results are not always meaningful.
Examples
library(MazamaCoreUtils)
setIfNull(NULL, "foo")
setIfNull(10, 0)
setIfNull("15", 0)
# This function can be useful for adding elements to a list
testList <- list("a" = 1, "b" = "baz", "c" = "4")
testList$a <- setIfNull(testList$a, 0)
testList$b <- setIfNull(testList$c, 0)
testList$d <- setIfNull(testList$d, 6)
# Be careful about unintended results
setIfNull("T", FALSE) # This returns `TRUE`
setIfNull(12.8, 5L) # This returns the integer 12
## Not run:
# Not all coercions are possible
setIfNull("bar", 5)
setIfNull("t", FALSE)
## End(Not run)