I'm trying to estimate a "diagonal reference model" in nls. In its basic form, the model consists of two factors with equal categories and a dependent variable. The model fits the main effects of the two factors such that they are proportional to each other. So the model I want to fit is: Y=p*m[f1]+(1-p)*m[f2] The m-parameters indicate the "average" main effect of factors f1 and f2 (with no intercept). The p-parameter indicates the relative impact of the two factors on Y. If p=.5, f1 and f2 have equal impact, for p>.5, f1 has greater impact, for p<.5 f2 has greater impact. I can estimate the model as follows for f1="row", f2="col", Y="nkids": rd<-model.matrix(~as.factor(row)-1) cd<-model.matrix(~as.factor(col)-1) strt<-list(m1=2,m2=2,m3=2,m4=2,m5=3,p=.5) nls(nkids~p*(rd[,1]*m1+rd[,2]*m2+rd[,3]*m3+rd[,4]*m4+rd[,5]*m5) + (1-p)*(cd[,1]*m1+cd[,2]*m2+cd[,3]*m3+cd[,4]*m4+cd[,5]*m5), start=strt) --- What I want however, is a more compact specification, where "row" and "col" are used to index which m-parameter should be used, something like: nls(nkids~p*strt[row]+(1-p)*strt[col],start=strt) This specification produces an error: "Error in nlsModel(formula, mf, start) : singular gradient matrix at initial parameter estimates". I suspect the problem is that "strt[row]" evaluates to a list of starting values rather than the object names m1, m2, etc. I've tried nls(nkids~p*get(names(strt[row]))+(1-p)*get(names(strt[col])),start=strt) But this produces an error as well: "Error in qr.qty(QR, resid) : qr and y must have the same number of rows" Can anyone point me in the right direction? How can I use "row" and "col" to index the appropriate "m" parameter in this model?