Description Usage Arguments Value See Also Examples
When used in the form fn\$somefunction(...arguments...)
it converts formulas among the arguments of somefunction to
functions using as.function.formula
. It uses a heuristic
to decide which formulas to convert. If any of the following
are true then that argument is converted from a formula to a
function: (1) there is only one formula among the arguments,
(2) the name of the formula argument is FUN
or
(3) the formula argument is not the first argument in the
argument list.
It also removes any simplify
argument whose value is
not logical and after processing it in the same way just
discussed in order to interpret it as a function it passes
the output of the command through do.call(simplify, output)
.
It also performs quasi-perl style string interpolation on any
character string arguments that begin with \1
removing
the \1
character. A dollar sign followed by a variable
name or R
code within backticks are both evaluated.
1 2 | ## S3 method for class 'fn'
x$FUN
|
x |
|
FUN |
Name of a function. |
Returns a function.
as.function.formula
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | # use of formula to specify a function.
# Note that LETTERS, letters and pi are automatically excluded from args
fn$lapply(list(1:4, 1:3), ~ LETTERS[x])
fn$sapply(1:3, ~ sin((n-1) * pi/180))
# use of simplify = rbind instead of do.call(rbind, by(...)).
# args to anonymous function are automatically determined.
fn$by(BOD, 1:nrow(BOD), ~ c(mn = min(x), mx = max(x)), simplify = rbind)
# calculate lm coefs of uptake vs conc for each Plant
fn$by(CO2, CO2$Plant, d ~ coef(lm(uptake ~ conc, d)), simplify = rbind)
# mid range of conc and uptake by Plant
fn$aggregate(CO2[,4:5], CO2[1], ~ mean(range(x)))
# string interpolation
j <- fn$cat("pi = $pi, exp = `exp(1)`\n")
## Not run:
# same but use cast/melt from reshape package
library(reshape)
fn$cast(Plant ~ variable, data = melt(CO2, id = 1:3), ~~ mean(range(x)))
# same
# uncomment when new version of doBy comes out (expected shortly)
# library(doBy)
# fn$summaryBy(.~Plant,CO2[-(2:3)],FUN= ~~mean(range(x)), pref='midrange')
## End(Not run)
# generalized matrix product
# can replace sum(x*y) with any other inner product of interest
# this example just performs matrix multiplication of a times b
a <- matrix(4:1, 2)
b <- matrix(1:4, 2)
fn$apply(b, 2, x ~ fn$apply(a, 1, y ~ sum(x*y)))
# integration
fn$integrate(~1/((x+1)*sqrt(x)), lower = 0, upper = Inf)
# optimization
fn$optimize(~ x^2, c(-1,1))
# using fn with S4 definitions
setClass('ooc', representation(a = 'numeric'))
fn$setGeneric('incr', x + value ~ standardGeneric('incr'))
fn$setMethod('incr', 'ooc', x + value ~ {x@a <- x@a+value; x})
oo <- new('ooc',a=1)
oo <- incr(oo,1)
oo
## Not run:
# plot quantile regression fits for various values of tau
library(quantreg)
data(engel)
plot(engel$x, engel$y, xlab = 'income', ylab = 'food expenditure')
junk <- fn$lapply(1:9/10, tau ~ abline(coef(rq(y ~ x, tau, engel))))
# rolling mid-range
library(zoo)
fn$rollapply(LakeHuron, 12, ~ mean(range(x)))
library(lattice)
fn$xyplot(uptake ~ conc | Plant, CO2,
panel = ... ~ { panel.xyplot(...); panel.text(200, 40, lab = 'X') })
library(boot)
set.seed(1)
fn$boot(rivers, ~ median(x, d), R = 2000)
## End(Not run)
x <- 0:50/50
matplot(x, fn$outer(x, 1:8, ~ sin(x * k*pi)), type = 'blobcsSh')
|
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.