> [EMAIL PROTECTED] writes: > > > The following gives an error: > > > > > `a(b)` <- 1:4 > > > `c(d)` <- (1:4)^2 > > > lm(`a(b)` ~ `c(d)`) > > Error in model.matrix.default(mt, mf, contrasts) : > > model frame and formula mismatch in model.matrix() > > > > To fix it replace this line in model.matrix.default: > > > > reorder <- match(attr(t, "variables")[-1], names(data)) > > > > with these two lines: > > > > strip.backquote <- function(x) gsub("^`(.*)`", "\\1", x) > > reorder <- match(strip.backquote(attr(t, "variables"))[-1], > > strip.backquote(names(data))) > > Hmm.. Yes, there's a bug (and it's likely not the only one we have > relating to odd variable names in model formulas), but I suspect that > the fix is wrong. > > The backquotes are not part of the variable names, but get added by > deparsing -- sometimes! Other times they do not: Try for instance > as.character(quote(`a(b)`)). (Which is as it should be. Other pieces > of logic relating to nonsyntactical names represent some rather > awkward compromises.) > > When backquotes have found their way into names(data) or the > "variables" attribute, I would rather suspect that they were created > by the wrong tool and fix that, not cure the symptom by stripping them > off at a later stage.
In model.frame.default there is a line: varnames <- as.character(vars[-1]) that turns part of a call object, vars, into a character string. We could change that to: varnames <- strip.backquote(as.character(as.list(vars[-1]))) or perhaps as.character should not return the backquotes in the first place in which case the fix would be to fix as.character. ______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-devel