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
[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,
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:
~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