[R] decomposing a string representing a valid mathematical expression?

Bert Gunter bgunter@4567 @end|ng |rom gm@||@com
Tue Oct 29 17:46:18 CET 2019


Does something like the following make any sense for your context?

> z <- "(xy+ s)/ (ab +log(4.13))"
>
> lapply(parse(text = z), FUN = function(x)strsplit(deparse(x), split =
"[[:space:]]+"))
[[1]]
[[1]][[1]]
[1] "(xy"        "+"          "s)/(ab"     "+"          "log(4.13))"


Cheers,
Bert


Bert Gunter

"The trouble with having an open mind is that people keep coming along and
sticking things into it."
-- Opus (aka Berkeley Breathed in his "Bloom County" comic strip )


On Tue, Oct 29, 2019 at 9:23 AM Ivan Krylov <krylov.r00t using gmail.com> wrote:

> On Tue, 29 Oct 2019 13:55:27 +0100
> Witold E Wolski <wewolski using gmail.com> wrote:
>
> > Since R knows how to parse expressions these type of expressions I
> > would like to reuse some existing functions and not to use gsub or
> > strsplit etc.
>
> You might be interested in the `parse` function:
>
> x <- "(a+b) * c/(d * (e - f))"
> str(parse(text = x))
> # length 1 expression((a + b) * c/(d * (e - f)))
> #  - attr(*, "srcref")=List of 1
> #   ..$ : 'srcref' int [1:8] 1 1 1 23 1 23 1 1
> #   .. ..- attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile'
> <environment: 0x55ebecdac210>
> #  - attr(*, "srcfile")=Classes 'srcfilecopy', 'srcfile'
> <environment:0x55ebecdac210>
> #  - attr(*, "wholeSrcref")= 'srcref' int [1:8] 1 0 2 0 0 0 1 2
> #   ..- attr(*, "srcfile")=Classes 'srcfilecopy',
> 'srcfile'<environment:0x55ebecdac210>
> parse(text = x)[[1]]
> # (a + b) * c/(d * (e - f))
> parse(text = x)[[1]][1]
> # `/`()
> parse(text = x)[[1]][2]
> # ((a + b) * c)()
> parse(text = x)[[1]][3]
> # (d * (e - f))()
>
> Quoting ?expression,
>
> >> As an object of mode ‘"expression"’ is a list, it can be subsetted
> >> by ‘[’, ‘[[’ or ‘$’, the latter two extracting individual calls etc.
>
> --
> Best regards,
> Ivan
>
> ______________________________________________
> R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list