hope this helps. spencer graves
Timur Elzhov wrote:
Dear R experts!
I'd to fit data by 'nls' with me-supplied function 'fcn'.
1) I'd like 'fcn' to accept arbitrary arguments, i.e. I defined it as f(...) {<body>}. (Ok, that's not actually impotant). 2) Second, I would NOT like to supply every parameter in the formula. To illustrate this, let's look at the last example of 'nls' help page:
## weighted nonlinear regression
data(Puromycin)
Treated <- Puromycin[Puromycin$state == "treated", ]
weighted.MM <- function(resp, conc, Vm, K)
{
## Purpose: exactly as white book p.451 -- RHS for nls()
## Weighted version of Michaelis-Menten model
## ---------------------------------------------------------------
## Arguments: `y', `x' and the two parameters (see book)
## ---------------------------------------------------------------
## Author: Martin Maechler, Date: 23 Mar 2001, 18:48
print(resp)
pred <- (Vm * conc)/(K + conc)
(resp - pred) / sqrt(pred)
}
Pur.wt <- nls( ~ weighted.MM(rate, conc, Vm, K), data = Treated,
start = list(Vm = 200, K = 0.1))
So, in this example I wouldn't like to write `weighted.MM(rate, conc, Vm, K'), and `start = list(Vm = 200, K = 0.1)', instead I'd like to supply _lists_. With the 'start' parameter it's easy - I create list
p.start <- list(Vm = 200, K = 0.1)
and assign it to 'start' in nls():
start = p.start
- that works. But, with the formula it's not so simple. Well, I tried at first to make formula more "list-like":
Pur.wt <- nls( ~ do.call("weighted.MM", list(rate, conc, Vm, K)), data = Treated, start = p.start)
- that works too. Now, let's try to separate data and parameters:
Pur.wt <- nls( ~ do.call("weighted.MM", c(list(rate, conc), list(Vm, K))), data = Treated, start = p.start)
- that's right. So, I have a data 'Treated', and a start params list 'p.start'. Now, here is the _point_: I want nls to read names of variables from the lists and supply it to function in the formula. In this example 'weighted.MM' has a certain arg list, but my function is 'fcn(...)', and I want supply _all_ these names to the fcn. I tried to change 'list(Vm, K)' to list(as.name("Vm"), as.name("K")):
Pur.wt <- nls( ~ do.call("weighted.MM", c(list(rate, conc), list(as.name("Vm"), as.name("K")))), data = Treated, start = p.start)
- works again! Now,
p.arg <- list(as.name("Vm"), as.name("K"))
Pur.wt <- nls( ~ do.call("weighted.MM", c(list(rate, conc), p.arg)),
data = Treated, start = p.start)
Error in model.frame(formula, rownames, variables, varnames, extras, extranames, : invalid variable type
How can I fix this, and supply _lists_ with parameter names (and data names) to fcn(...) in nls? Thanks a lot! :-)
-- WBR, Timur.
______________________________________________
[EMAIL PROTECTED] mailing list
https://www.stat.math.ethz.ch/mailman/listinfo/r-help
______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help
