Provides an easy mechanism for creating simple "mathematical" functions via a formula interface.
makeFun(object, ...)
# S3 method for class '`function`'
makeFun(
object,
...,
strict.declaration = TRUE,
use.environment = TRUE,
suppress.warnings = FALSE
)
# S3 method for class 'formula'
makeFun(
object,
...,
strict.declaration = TRUE,
use.environment = TRUE,
suppress.warnings = TRUE
)
# S3 method for class 'lm'
makeFun(object, ..., transformation = NULL)
# S3 method for class 'glm'
makeFun(object, ..., type = c("response", "link"), transformation = NULL)
# S3 method for class 'nls'
makeFun(object, ..., transformation = NULL)an object from which to create a function. This should generally be specified without naming.
additional arguments in the form var = val that
set default values for the inputs to the function.
if TRUE (the default), an error is thrown if
default values are given for variables not appearing in the object formula.
if TRUE, then variables implicitly defined in the
object formula can take default values from the environment at the time
makeFun is called. A warning message alerts the user to this situation,
unless suppress.warnings is TRUE.
A logical indicating whether warnings should be suppressed.
a function used to transform the response.
This can be useful to invert a transformation used on the response
when creating the model. If NULL, an attempt will be made to infer
the transformation from the model formula. A few simple transformations
(log, log2, sqrt) are recognized. For other transformations,
transformation should be provided explicitly.
one of 'response' (default) or 'link' specifying scale to be used
for value of function returned.
a function
The definition of the function is given by the left side of a two-sided formula or the right side of a one-sided formula. The right side lists at least one of the inputs to the function. The inputs to the function are all variables appearing on either the left or right sides of the formula. Those appearing in the right side will occur in the order specified. Those not appearing in the right side will appear in an unspecified order.
When creating a function from a model created with lm, glm, or nls,
the function produced is a wrapper around the corresponding version of predict.
This means that having variables in the model with names that match arguments of
predict will lead to potentially ambiguous situations and should be avoided.
f <- makeFun( sin(x^2 * b) ~ x & y & a); f
#> function (x, y, a, b)
#> sin(x^2 * b)
#> <environment: 0x55c1a1f9bfa0>
g <- makeFun( sin(x^2 * b) ~ x & y & a, a = 2 ); g
#> function (x, y, a = 2, b)
#> sin(x^2 * b)
#> <environment: 0x55c1a1f9bfa0>
h <- makeFun( a * sin(x^2 * b) ~ b & y, a = 2, y = 3); h
#> function (b, a = 2, y = 3, x)
#> a * sin(x^2 * b)
#> <environment: 0x55c1a1f9bfa0>
ff <- makeFun(~ a*x^b + y ); ff # one sided formula
#> function (x, y, a, b)
#> a * x^b + y
#> <environment: 0x55c1a173cca0>
gg <- makeFun(cos(a*x^b + y) ~ . ); gg # dummy right-hand side
#> function (x, y, a, b)
#> cos(a * x^b + y)
#> <environment: 0x55c1a2316098>
if (require(mosaicData)) {
model <- lm( log(length) ~ log(width), data = KidsFeet)
f <- makeFun(model, transformation = exp)
f(8.4)
head(KidsFeet, 1)
}
#> name birthmonth birthyear length width sex biggerfoot domhand
#> 1 David 5 88 24.4 8.4 B L R
if (require(mosaicData)) {
model <- lm(wage ~ poly(exper, degree = 2), data = CPS85)
fit <- makeFun(model)
if (require(ggformula)) {
gf_point(wage ~ exper, data = CPS85) |>
gf_fun(fit(exper) ~ exper, color = "red")
}
}
if (require(mosaicData)) {
model <- glm(wage ~ poly(exper, degree = 2), data = CPS85, family = gaussian)
fit <- makeFun(model)
if (require(ggformula)) {
gf_jitter(wage ~ exper, data = CPS85) |>
gf_fun(fit(exper) ~ exper, color = "red")
gf_jitter(wage ~ exper, data = CPS85) |>
gf_function(fun = fit, color = "blue")
}
}
if (require(mosaicData)) {
model <- nls( wage ~ A + B * exper + C * exper^2, data = CPS85, start = list(A = 1, B = 1, C = 1) )
fit <- makeFun(model)
if (require(ggformula)) {
gf_point(wage ~ exper, data = CPS85) |>
gf_fun(fit(exper) ~ exper, color = "red")
}
}