[R] Help needed with eval parse

Huzefa Khalil huze|@@kh@||| @end|ng |rom um|ch@edu
Wed Sep 18 16:30:16 CEST 2019


That worked! Thanks for the explanation.

On Wed, Sep 18, 2019 at 10:06 AM Duncan Murdoch
<murdoch.duncan using gmail.com> wrote:
>
> On 18/09/2019 8:43 a.m., Huzefa Khalil wrote:
> > Hello R-users,
> >
> > I have been running a script which produces objects based on the
> > column names of a data.frame. The column names are of the form CB_1-1,
> > CB_1-2, etc. Now this calculation was rather long and memory
> > intensive, so I would rather not have to do it again after fixing the
> > column names using "make.names". As a consequence, I am left with a
> > bunch of R objects with `-` in the name.
> > Accessing them is proving challenging and any help would be appreciated.
> >
> > Reproducible example:
> > `cb_1-2` <- "hello world"
> > t <- "cb_1-2"
> > t <- as.name(t)
> > t <- eval(parse(text = t))
> >
> > Error in eval(parse(text = t)) : object 'cb_1' not found
>
> After t <- as.name(t), you already have language:  no need to parse it
> again.  So
>
>    eval(t)
>
> works.  If you have more complicated expressions, use call() to set them
> ụp.  For example, call("paste0", t, "!") evaluates to
>
>    paste0(`cb_1-2`, "!")
>
> and evaluating that expression via
>
>    eval(call("paste0", t, "!"))
>
> gives
>
> [1] "hello world!"
>
> Don't go back and forth between language objects and text
> representations of them, because it's hard to do that without
> introducing changes.  In other words, don't use eval(parse()).
>
> Duncan Murdoch



More information about the R-help mailing list