Witold E Wolski
2019-Oct-29 12:55 UTC
[R] decomposing a string representing a valid mathematical expression?
Hello, I would like to decompose a string i.e. "a - b" or "a +b" into an array or list ["a","-","b"] 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. Thank you Witek -- Witold Eryk Wolski
Bert Gunter
2019-Oct-29 14:37 UTC
[R] decomposing a string representing a valid mathematical expression?
Not sure what you're looking for, but see ?deparse for deparsing **expressions.** -- 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 5:56 AM Witold E Wolski <wewolski at gmail.com> wrote:> Hello, > > I would like to decompose a string i.e. > > "a - b" > or "a +b" > > into an array or list > ["a","-","b"] > > 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. > > Thank you > Witek > > -- > Witold Eryk Wolski > > ______________________________________________ > R-help at 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]]
Ivan Krylov
2019-Oct-29 16:22 UTC
[R] decomposing a string representing a valid mathematical expression?
On Tue, 29 Oct 2019 13:55:27 +0100 Witold E Wolski <wewolski at 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
Bert Gunter
2019-Oct-29 16:46 UTC
[R] decomposing a string representing a valid mathematical expression?
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 at gmail.com> wrote:> On Tue, 29 Oct 2019 13:55:27 +0100 > Witold E Wolski <wewolski at 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 at 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]]