# [R] Issue with formula conversion

Richard M. Heiberger rmh at temple.edu
Wed Aug 27 22:33:58 CEST 2014

```do you have control over the external source?

if so, then something like

BlockFunction <- "pdComSymm"
ranEff1 <- "~Variety -1"

fm <- lme(yield ~ nitro, data=Oats,
random=list(Block=get(BlockFunction)(ranEff1)))

The above is untested.  An example if get() is
> get("sum")(1:4)
[1] 10

The main problem with David's solution, which does work, is the use
of the eval(parse()) idiom.  This is usually strongly discouraged.  See, for
example,

> fortunes::fortune(106)

If the answer is parse() you should usually rethink the question.
-- Thomas Lumley
R-help (February 2005)

On Wed, Aug 27, 2014 at 4:11 PM, Gang Chen <gangchen6 at gmail.com> wrote:
> Good point!
>
> Here is an example:
>
> library(nlme)
> fm <- lme(yield ~ nitro, data=Oats, random=list(Block=pdComSymm(~Variety-1)))
>
> 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)))
>
> 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
>>
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help