Your cart is stuck in front of your horse. This will be WAY easier to 
accomplish if you rename your columns in your input data frame before fitting 
the model.
---------------------------------------------------------------------------
Jeff Newmiller                        The     .....       .....  Go Live...
DCN:<jdnew...@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live Go...
                                      Live:   OO#.. Dead: OO#..  Playing
Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
/Software/Embedded Controllers)               .OO#.       .OO#.  rocks...1k
--------------------------------------------------------------------------- 
Sent from my phone. Please excuse my brevity.

Michael Friendly <frien...@yorku.ca> wrote:

>For an application, I need to get a character string representation of 
>the formula or
>model call for glm objects, but also, for labeling output and plots, I 
>want to be able
>to abbreviate the words (variables) in model terms.  This requires some
>
>formula
>magic that I can't quite get, in particular extracting the terms from a
>
>formula and
>then the words in each term.
>
>Perhaps there is some code for something similar
>I haven't found yet, or someone can suggest how to do this.
>
>A runnable example to show what I mean:
>
>Freq <- c(68,42,42,30, 37,52,24,43,
>     66,50,33,23, 47,55,23,47,
>     63,53,29,27, 57,49,19,29)
>
>Temperature <- gl(2, 2, 24, labels = c("Low", "High"))
>Softness <- gl(3, 8, 24, labels = c("Hard","Medium","Soft"))
>M.user <- gl(2, 4, 24, labels = c("N", "Y"))
>Brand <- gl(2, 1, 24, labels = c("X", "M"))
>
>detg <- data.frame(Freq,Temperature, Softness, M.user, Brand)
>detg.m0 <- glm(Freq ~ M.user*Temperature*Softness + 
>Brand*M.user*Temperature,
>        family = poisson, data = detg)
>
>detg.m1 <- glm(Freq ~ (M.user + Temperature + Softness + Brand),
>        family = poisson, data=detg)
>
>detg.m2 <- glm(Freq ~ (M.user + Temperature + Softness + Brand)^2,
>        family = poisson, data=detg)
>
>detg.m2a <- update(detg.m1, . ~ .^2)
>
>In plot.lm, I found the following code to extract the model call from a
>
>glm object as
>a string and abbreviate it to a total length <=75.  I need shorter
>total 
>length,
>by abbreviating individual words in the model call, so the approach has
>to
>at least extract the terms in the model and then abbreviate the words
>in 
>each term.
>
># from plot.lm: get model call as a string
># TODO: how to use abbreviate to abbreviate the words in the model
>terms???
>mod.call <- function(x, max.len=75) {
>         cal <- x$call
>         if (!is.na(m.f <- match("formula", names(cal)))) {
>             cal <- cal[c(1, m.f)]
>             names(cal)[2L] <- ""
>         }
>         cc <- deparse(cal, max.len+5)
>         nc <- nchar(cc[1L], "c")
>         abbr <- length(cc) > 1 || nc > max.len
>         cap <- if (abbr)
>             paste(substr(cc[1L], 1L, min(max.len, nc)), "...")
>         else cc[1L]
>         cap
>}
>
>Tests, & WANTED, say with max length of each word in the string <= 6 & 
>maximum total
>length <= 40
>
> > mod.call(detg.m0)
>[1] "glm(Freq ~ M.user * Temperature * Softness + Brand * M.user * 
>Temperature)"
>
>WANTED, somthing like:
>"glm(Freq ~ M.user * Temp * Softne + Brand * M.user * Temp)"
>
> > mod.call(detg.m2a)
>[1] "glm(Freq ~ M.user + Temperature + Softness + Brand + 
>M.user:Temperature + M ..."
> >
> > mod.call(detg.m2a, max.len=200)
>[1] "glm(Freq ~ M.user + Temperature + Softness + Brand + 
>M.user:Temperature + M.user:Softness + M.user:Brand + 
>Temperature:Softness + Temperature:Brand + Softness:Brand)"
> >
>
>WANTED, somthing closer to
>"glm(Freq ~ M + Tmp + Sft + Brnd + M:Tmp + M.:Sft + M.us:Brnd + Tmp:Sft
>
>+ Tmp:Brnd + Sft:Brnd)"
>
>TIA
>-Michael

______________________________________________
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.

Reply via email to