David, you caught my typo of excess quotation marks. this should work
ranEff1 <- ~Variety -1 random=list(Block=get(BlockFunction)(ranEff1))) On Wed, Aug 27, 2014 at 4:41 PM, David Winsemius <dwinsem...@comcast.net> wrote: > > 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 <gangch...@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 <dwinsem...@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 <dwinsem...@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@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 > ______________________________________________ R-help@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.