see below. On Fri, Apr 13, 2012 at 8:50 PM, Kjetil Halvorsen <kjetilbrinchmannhalvor...@gmail.com> wrote: > I am experimenting with rSymPy, and it seems to work nice. > > > However, I dislike the need to wrap all sympy expressions within > quotes, it leads to ugly calls like > library(rSymPy) > Var("x,y,z") > sympy("(x+y)**2") > and so on. > > Inspired by the function cq from mvbutiles package: > library(mvbutils) >> cq > function (...) > { > as.character(sapply(as.list(match.call(expand.dots = TRUE))[-1], > as.character)) > } > <bytecode: 0x7fca88443f78> > <environment: namespace:mvbutils> > > I tried to write >> sympyq > function(...) { > arg <- as.character(match.call(expand.dots=TRUE)[-1]) > thiscall <- as.call(list(as.name("sympy"), arg)) > print( thiscall ) # for debugging > eval(thiscall, parent.frame() ) > } > > Some examples: > (After doing > Var("x,y,z") ) >> sympyq(4+4) > sympy("4 + 4") > [1] "8" > >> sympyq(3*x+4*y+89*z-6*x) > sympy("3 * x + 4 * y + 89 * z - 6 * x") > [1] "-3*x + 4*y + 89*z" >> > > But then: > >> sympyq( (x+y)**2 ) > sympy("(x + y)^2") > Error in .jcall("RJavaTools", "Ljava/lang/Object;", "invokeMethod", cl, : > Traceback (most recent call last): > File "<string>", line 1, in <module> > TypeError: unsupported operand type(s) for ^: 'Add' and 'int' > > Note that R has changed the syntax **2 to ^2, which sympy does not > seem to like! > > Any ideas for avoiding this, or more generally, better ideas for > achieving what I am trying to do? > > Kjetil
Ok, I am trying now with > sympyq function(...) { arg <- as.character(match.call(expand.dots=TRUE)[-1]) arg <- gsub('^', x=arg, replacement='**', fixed=TRUE) thiscall <- as.call(list(as.name("sympy"), arg)) print( thiscall ) eval(thiscall, parent.frame() ) } which gives: > sympyq( (x+y)**2 ) sympy("(x + y)**2") [1] "(x + y)**2" > sympyq ( sin(pi) ) sympy("sin(pi)") [1] "0" > sympyq( limit(sin(x)/x, x, 0) ) sympy("limit(sin(x)/x, x, 0)") [1] "1" > sympyq( diff(sin(2*x), x, 2) ) sympy("diff(sin(2 * x), x, 2)") [1] "-4*sin(2*x)" so seems to work, but then, tyhe following I do not understand: > sympyq( ((x+y)**2).expand() ) Error: unexpected symbol in "sympyq( ((x+y)**2).expand" > sympyq( sin(x+y).expand(trig=True) ) Error: unexpected symbol in "sympyq( sin(x+y).expand" ??? Kjetil ______________________________________________ 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.