Dear Prof. Ripley, Thank you for your helpful reply. I will download and try R-patched ASAP.
I take your point, I should have tried the latest version (R-patched) before posting. With respect to R-patched, would you recommend its use routinely, or only in investigation of "unexpected behaviour"? Thanks again, Keith Jewell ------------- "Prof Brian Ripley" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] > Your example works in R-patched, as a consequence of investigations of a > different problem. (See the comments in the posting guide about updating > your R and trying the very latest versions.) > > Windows binaries for R-patched are available on CRAN. > > On Tue, 5 Aug 2008, Keith Jewell wrote: > >> Hi All, >> >> I've hit a problem using nls. I think it may be a restriction in the >> applicability of nls and I may have found a fix, but I've been wrong >> before. >> >> This example is simplified to the essentials. My real application is much >> more complicated. >> >> Take a function of matrix 'x' with additional arguments: >> matrix 'aMat' whose values are _not_ to be determined by nls >> vector 'Coeffs' whose vales _are_ to be determined. >> For simplicity, this isn't a selfStart function with an 'initial' >> attribute, >> but that doesn't change things. >> >> Myfunc<-function(x, aMat, Coeffs) >> { >> # >> # result = quadratic response in x with >> # terms selected by aMat >> # >> aMat[aMat!=0] <- Coeffs >> rowSums((x%*%aMat)%*%t(x)) >> } >> >> If aMat is passed in by name (e.g. aMat = bMat) nls fails. >> e.g. >> # >> # data frame with some noise >> DF <- data.frame(x1 = runif(20, 1, 20), x2=runif(20, 1, 20)) >> DF$y <- 1 +DF$x1 +DF$x2 +DF$x1*DF$x2 +DF$x1^2 + DF$x2^2 + rnorm(20) >> # >> # matrix to pass in as aMat >> bMat <- matrix(c(1,1,0,0), 2, 2) >> # >> # and nls fails >> nls(y ~ Myfunc(cbind(x1, x2), bMat, aVec), DF, start=list(aVec=c(1,2))) >> # >> # pass in the same matrix other than by name and it works >> nls(y ~ Myfunc(cbind(x1, x2), matrix(c(1,1,0,0), 2, 2), aVec), DF, >> start=list(aVec=c(1,2))) >> >> I think the problem lies in this line in nls >> >> for (var in varNames[!varIndex]) mf[[var]] <- eval(as.name(var), data, >> env) >> >> This adds values for some named arguments (bMat) as columns of the data >> frame. The problem is that generally they don't have the same number of >> rows. I've made it work for my example by replacing that line with this >> line, which adds values for those arguments to the data frame as >> parameters >> rather than as a column >> >> attributes(mf)[["parameters"]] <- >> c(attributes(mf)[["parameters"]],lapply(varNames[!varIndex], >> function(var) >> eval(as.name(var), data, env)) ) >> >> Problem is, I really don't know nls internals enough to be sure I haven't >> broken something. >> And anyway, if this is really an improvement I ought to share it, but >> don't >> know how. >> >> Or I could have totally the wrong end of the stick... >> >> Comments, corrections and advice are welcome. >> >> Thanks in advance, >> >> Keith Jewell >> ----------------------- >>> sessionInfo() >> R version 2.7.0 (2008-04-22) >> 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 datasets tcltk utils methods >> base >> >> other attached packages: >> [1] xlsReadWrite_1.3.2 svSocket_0.9-5 svIO_0.9-5 R2HTML_1.58 >> [5] svMisc_0.9-5 svIDE_0.9-5 >> >> loaded via a namespace (and not attached): >> [1] tools_2.7.0 VGAM_0.7-7 >> >> ______________________________________________ >> 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. >> > > -- > Brian D. Ripley, [EMAIL PROTECTED] > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595 > > ______________________________________________ > 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. > ______________________________________________ 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.