[R] Issue with formula conversion

David Winsemius dwinsemius at comcast.net
Wed Aug 27 22:22:42 CEST 2014


On Aug 27, 2014, at 1:11 PM, Gang Chen wrote:

> Good point!
> 
> Here is an example:
> 
> library(nlme)
> fm <- lme(yield ~ nitro, data=Oats, random=list(Block=pdComSymm(~Variety-1)))
> 

One problem is that youa re misspelling the function name.


> Now the problem I'm facing is that the following part
> 
> pdComSymm(~Variety-1)
> 
> is read in as a string of characters from an external source:
> 
> ranEff <- 'pdComSymm(~Variety-1)'
> 
> The following
> 
> (ranEff1 <- as.formula(ranEff))
> ~Variety - 1
> 
> is not what I want. Even though
> 
> fm <- lme(yield ~ nitro, data=Oats, random=list(Block=pdCompSymm(ranEff1)))

> ranEff <- 'pdCompSymm(~Variety-1)'
> tt <- parse(text=ranEff)

# Returns an unevaluated expression

> fm <- lme(yield ~ nitro, data=Oats, random=list(Block=eval(tt) ))
> fm
Linear mixed-effects model fit by REML
  Data: Oats 
  Log-restricted-likelihood: -296.5209
  Fixed: yield ~ nitro 
(Intercept)       nitro 
   81.87222    73.66667 
snipped rest of output.

-- 
David

> 
> works, I don't know the 'pdCompSymm' part in advance and would like to
> make the process automatic.
> 
> On Wed, Aug 27, 2014 at 3:49 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>> 
>> On Aug 27, 2014, at 12:44 PM, Gang Chen wrote:
>> 
>>> Thanks for the help! However, I just need to get
>>> 
>>> pdCompSymm(~1 + Age)
>> 
>> That's not a formula in the R sense of the word. You should do a better job of posting a use case. Perhaps you want an expression?
>> 
>> --
>> David.
>>> 
>>> without a tilde (~) at the beginning.
>>> 
>>> On Wed, Aug 27, 2014 at 3:34 PM, David Winsemius <dwinsemius at comcast.net> wrote:
>>>> 
>>>> On Aug 27, 2014, at 11:19 AM, Gang Chen wrote:
>>>> 
>>>>> A random effect formulation for R package nlme is read in as a string
>>>>> of characters from an input file:
>>>>> 
>>>>> ranEff <- "pdCompSymm(~1+Age)"
>>>>> 
>>>>> I need to convert 'ranEff' to a formula class. However, as shown below:
>>>>> 
>>>>>> as.formula(ranEff)
>>>>> ~1 + Age
>>>>> 
>>>>> the "pdCompSymm" is lost in the conversion. Any solutions?
>>>> 
>>>> as.formula(paste("~",ranEff))
>>>> ~pdCompSymm(~1 + Age)
>>>> --
>>>> 
>>>> David Winsemius
>>>> Alameda, CA, USA
>>>> 
>> 
>> David Winsemius
>> Alameda, CA, USA
>> 

David Winsemius
Alameda, CA, USA



More information about the R-help mailing list