Learn R Programming

MuMIn (version 1.9.5)

updateable: Make a function return updateable result

Description

Creates a function wrapper that stores a call in the values returned by its argument FUN.

Usage

updateable(FUN)
updateable2(FUN, Class)

# updateable wrapper for mgcv::gamm and gamm4::gamm4 uGamm(formula, random = NULL, ..., lme4 = inherits(random, "formula"))

Arguments

FUN
function to be modified, found via match.fun.
Class
optional character vector naming class(es) to be set onto the result of FUN (not possible with formal S4 objects).
formula, random, ...
arguments to be passed to gamm or gamm4
lme4
if TRUE, gamm4 is called, gamm otherwise.

Value

  • A function with the same arguments as FUN, wrapping a call to FUN and adding an element named call to its result if possible, or an attribute "call" (if the returned value is atomic or a formal S4 object).

encoding

utf-8

Details

Most model fitting functions in Rreturns an object that can be updated or re-fitted via update. This is thanks to the call stored in the object, which can be used (possibly modified) later on. It is also utilised by dredge to generate sub-models. Some functions (such as gamm or MCMCglmm) do not provide their result with the call element. In this case updateable can be used on that function to add it. The resulting wrapper should be used in exactly the same way as the original function.

See Also

update, getCall, getElement, attributes

gamm, gamm4

Examples

Run this code
# Simple example with cor.test:

# From example(cor.test)
x <- c(44.4, 45.9, 41.9, 53.3, 44.7, 44.1, 50.7, 45.2, 60.1)
y <- c( 2.6,  3.1,  2.5,  5.0,  3.6,  4.0,  5.2,  2.8,  3.8)

ct1 <- cor.test(x, y, method = "kendall", alternative = "greater")

uCor.test <- updateable(cor.test)

ct2 <- uCor.test(x, y, method = "kendall", alternative = "greater")

getCall(ct1) # --> NULL
getCall(ct2)

#update(ct1, method = "pearson") --> Error
update(ct2, method = "pearson")
update(ct2, alternative = "two.sided")



## predefined wrapper for 'gamm':
library(mgcv)
set.seed(0)
dat <- gamSim(6, n = 100, scale = 5, dist = "normal")

fmm1 <- uGamm(y ~s(x0)+ s(x3) + s(x2), family = gaussian, data = dat, 
    random = list(fac = ~1))

getCall(fmm1)
class(fmm1)
###


library(caper)
data(shorebird)
shorebird <- comparative.data(shorebird.tree, shorebird.data, Species)

fm1 <- crunch(Egg.Mass ~ F.Mass * M.Mass, data = shorebird)

uCrunch <- updateable(crunch)

fm2 <- uCrunch(Egg.Mass ~ F.Mass * M.Mass, data = shorebird)

getCall(fm1)
getCall(fm2)
update(fm2) # Error with 'fm1'
dredge(fm2)

Run the code above in your browser using DataLab