Re: [S] using strings for formula in ms()

Prof Brian D Ripley (ripley@stats.ox.ac.uk)
Thu, 20 Aug 1998 07:26:02 +0100 (BST)


On Thu, 20 Aug 1998, Kristian S. Gleditsch wrote:

> I have a fairly lengthy equation that I want to minimize with ms() inside a
> generic function I am writing

`generic' as in `general' not as in S `generic'?

> I would like to create the formula corresponding to a set of right hand
> side variables in a character vector
>
> (e.g., xxx.formula <- c("log(1-lambda*wroot),
> paste("+lambda*b",1:(length(betas)-1),"*",sep="",...")
>
> with the different variables and parameters used all in a dataframe
>
> (e.g. xxx.data).
>
> However, I am unable to use this character vector as the formula in ms, e.g.
>
> ms(~xxx.formula,data=xxx.data)
>
> Must I convert the vector to some other mode or class, or is there any
> other way to get this to work?

There are several ways, but two of the most promising are:

(1) ms(formula(paste("~", xxx.formula)), ...)

(2) eval(parse(text=paste("ms(~", xxx.formula, ", data=xxx.data)",sep="")))

As in (from the ms help page)

lprob <- function(lp)log(1+ exp(lp)) - lp # log-likelihood
xxx.formula <- "lprob(D * alpha)"
ms(formula(paste("~", xxx.formula)), pingpong)
value: 1127.635
parameters:
alpha
0.01114251
formula: ~ lprob(D * alpha)
3017 observations
call: ms(formula = formula(paste("~", xxx.formula)), data = pingpong)

If you want to see a sensible call in the result, you can use

xxx.data <- pingpong
eval(parse(text=paste("ms(~", xxx.formula, ", data=xxx.data)",sep="")))
value: 1127.635
parameters:
alpha
0.01114251
formula: ~ lprob(D * alpha)
3017 observations
call: ms(formula = ~ lprob(D * alpha), data = xxx.data)

There are slicker ways in S version 4, so a reminder than when S-PLUS 5
appears it will be vital to tell us which system you are using.

-- 
Brian D. Ripley,                  ripley@stats.ox.ac.uk
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 272860 (secr)
Oxford OX1 3TG, UK                Fax:  +44 1865 272595

----------------------------------------------------------------------- This message was distributed by s-news@wubios.wustl.edu. To unsubscribe send e-mail to s-news-request@wubios.wustl.edu with the BODY of the message: unsubscribe s-news