[R] Issue with formula conversion
David Winsemius
dwinsemius at comcast.net
Wed Aug 27 22:41:33 CEST 2014
On Aug 27, 2014, at 1:33 PM, Richard M. Heiberger wrote:
> do you have control over the external source?
>
> if so, then something like
>
> BlockFunction <- "pdComSymm"
> ranEff1 <- "~Variety -1"
I doubt that would work, since it is not a formula object.
>
> fm <- lme(yield ~ nitro, data=Oats,
> random=list(Block=get(BlockFunction)(ranEff1)))
After correcting the misspelling of the function name, I tested this approach:
BlockFunction <- "pdCompSymm"
ranEff1 <- as.formula("~Variety -1")
fm <- lme(yield ~ nitro, data=Oats, random=list(Block=do.call(BlockFunction, list(form=ranEff1) )
))
fm
#----------
Linear mixed-effects model fit by REML
Data: Oats
Log-restricted-likelihood: -296.5209
Fixed: yield ~ nitro
snipped
--
David.
>
> 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
>> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
David Winsemius
Alameda, CA, USA
More information about the R-help
mailing list