Hi All, Another nls related problem (for background, I'm migrating a complicated modelling package from S-plus to R).
Below I've reduced this to the minimum necessary to demonstrate my problem (I think); the real situation is more complicated. Two similar selfStart functions, ssA and ssB. The 'initial' function for ssB modifies its arguments a little and then calls getInital for ssA. In addition to the "x" and the fitted coefficients ("Coeff"), ssA and ssB have arguments ("A") which are not the same length as the dataframe, so cannot be passed as columns of that dataframe. The initial function for ssA uses eval(... parent.frame()) to find "A", which is fine when called from .GlobalEnv. But when called from the initial function of ssB it can't find (the modified version of) "A" . If A is assigned as a parameter of the dataframe then getInitial.formula returns "A" as initial estimates of "Coeff", so that doesn't work. I've explored the evaluation frame parent-child structure created by the nested getInitial calls, but it doesn't seem helpful, and I certainly couldn't trust my understanding of it. I'm considering making up the matched call and calling the 'initial' function of ssA directly, in the same manner as getInitial.selfStart attr(ssA, "initial"))(mCall = mCall, data = data, LHS = LHS) or perhaps if I call getInitial thus... getInitial(ssA, data, mCall, LHS = NULL, ...) it will call getInitial.selfStart without calling getInitial.formula. In that case perhaps eval(... parent.frame()) will find the argument? Or, at least I could attach the argument to the dataframe as a parameter. But this all seems a but clumsy, and I feel there must be a better way. Any comments and/or advice will be welcome. Thanks in advance; Keith Jewell ------------------------------------------- code showing the problem: ssA <- selfStart( model = function(x, Coeff, A) { paste(x, Coeff, A) }, initial = function(mCall, data, LHS) { x <- eval(mCall[["x"]], data, parent.frame()) A <- eval(mCall[["A"]], data, parent.frame()) paste("CoeffA", x, A) }, parameters = c("Coeff") ) ssB <- selfStart( model = function(x, Coeff, A) { paste(x, Coeff, A) }, initial = function(mCall, data, LHS) { x <- eval(mCall[["x"]], data, parent.frame()) A <- eval(mCall[["A"]], data, parent.frame()) Amod <- paste(A, "mod in B") getInitial(y ~ ssA(x, Coeff, Amod), data) }, parameters = c("Coeff") ) getInitial(y ~ ssA("this", "that", "other"), data= data.frame(x=c("test"))) getInitial(y ~ ssB("this", "that", "other"), data= data.frame(x=c("test"))) --------------------------- > sessionInfo() R version 2.7.1 Patched (2008-08-15 r46352) i386-pc-mingw32 locale: LC_COLLATE=English_United Kingdom.1252;LC_CTYPE=English_United Kingdom.1252;LC_MONETARY=English_United Kingdom.1252;LC_NUMERIC=C;LC_TIME=English_United Kingdom.1252 attached base packages: [1] stats graphics grDevices utils datasets methods base ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.