# Create functions to calculate the residual vector or the sum of squares, possibly with derivatives.

### Description

Create functions to calculate the residual vector or the sum of squares, possibly with derivatives.

### Usage

 ```1 2 3``` ```model2rjfunx(modelformula, pvec, data = NULL, jacobian = TRUE, testresult = TRUE, ...) model2ssgrfunx(modelformula, pvec, data = NULL, gradient = TRUE, testresult = TRUE, ...) ```

### Arguments

 `modelformula` A formula describing a nonlinear regression model. `pvec` A vector of parameters. `data` A dataframe, list or environment holding data used in the calculation. `jacobian` Whether to compute the Jacobian matrix. `gradient` Whether to compute the Jacobian matrix. `testresult` Whether to test the function by evaluating it at `pvec`. `...` Additional data needed to compute the residuals and Jacobian.

### Details

If `pvec` does not have names, the parameters will have names generated in the form p<n>, e.g. `p1, p2`. Names that appear in `pvec` will be taken to be parameters of the model.

The `data` argument may be a dataframe, list or environment, or `NULL`. If it is not an environment, one will be constructed using the components of `data` with parent environment set to be the environment of `modelformula`.

The search order for variables in the formula will be as follows: Variables specified in the `...` argument will always take highest precedence. If `data` is given and is an environment, the search continues only in that environment and its parent, grandparent, etc. Otherwise `data` is searched next, followed by the environment of `modelformula` (and its parents, grandparents, etc.)

### Value

`model2rjfunx` returns a function with header `function(prm)`, which evaluates the residuals (and if `jacobian` is `TRUE` the Jacobian matrix) of the model at `prm`. The residuals are defined to be the right hand side of `modelformula` minus the left hand side.

`model2ssgrfunx` returns a function with header `function(prm)`, which evaluates the sum of squared residuals (and if `gradient` is `TRUE` the gradient vector) of the model at `prm`.

### Author(s)

John Nash and Duncan Murdoch

`nls`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20``` ``` y <- c(5.308, 7.24, 9.638, 12.866, 17.069, 23.192, 31.443, 38.558, 50.156, 62.948, 75.995, 91.972) tt <- seq_along(y) # for testing mydata <- data.frame(y = y, tt = tt) f <- y ~ b1/(1 + b2 * exp(-1 * b3 * tt)) + shift p <- c(b1 = 1, b2 = 1, b3 = 1) # This fails first<-try(rjfn <- model2rjfunx(f, p, data = mydata, shift=100)) if (class(first) != "try-error") { rjfn(p) myexp <- modelexpr(rjfn) cat("myexp:") print(myexp) } else { cat("rjfn try-error\n") } # ssgrfn <- model2ssgrfun(f, p, data = mydata, shift=100) # ssgrfn(p) # ssgrfn2 <- model2ssgrfun(f, p, data = mydata, shift=50) # ssgrfn2(p) ```