On May 19, 8:09 am, William Stein <wst...@gmail.com> wrote: > On Wed, May 18, 2011 at 10:59 PM, lgautier <lgaut...@gmail.com> wrote: > > > On May 18, 11:21 pm, William Stein <wst...@gmail.com> wrote: > >> On Wed, May 18, 2011 at 2:16 PM, William Stein <wst...@gmail.com> wrote: > >> > On Wed, May 18, 2011 at 12:24 PM, kcrisman <kcris...@gmail.com> wrote: > >> >> On the page you linked to: > >> >> "This the documentation for what will be soon the older version of > >> >> rpy2. Do consider the upcoming 2.1.x releases if you are starting a > >> >> project now." > > >> >> If you look athttp://rpy.sourceforge.net/rpy2/doc-2.2/html/changes.html > >> >> it also seems like in higher-numbered releases there are changes in > >> >> this functionality. Maybe this is a known bug; can you try > > >> >> from rpy2.robjects.numpy2ri import numpy2ri > >> >> ro.conversion.py2ri = numpy2ri > > >> >> as on the 2.2 documentation and see if that works. > > >> > Nope, not at all. > > >> >> That said, I never use it - I always use the Sage pexpect interface to > >> >> R. But now I will bookmark this worksheet if I get the chance to give > >> >> another R/Sage talk! > > >> > The Sage pexpect is slow and brittle if the size of data you need to > >> > move into or out of R is large. The rpy2 interface is much more > >> > robust in this regard. > >> > But rpy2 is also somewhat weird and wacky, as I learned today. > > >> And, surprisingly, it is not very fast for evaluating basic > >> expression. It's really *shockingly* slow for a C library interface. > >> I don't know how it can be so bad: > > >> sage: import rpy2.robjects as robjects > >> sage: R = robjects.r > >> sage: print R('2 + 3') # the rpy2 cython interface (note the import!) > > > I don't think that Cython is currently used anywhere in rpy2. > > I know. I meant "C library" interface. Sorry for the confusion. > > > > >> [1] 5 > >> sage: timeit("r('2+3')") > >> 5 loops, best of 3: 1.46 ms per loop > >> sage: timeit("R('2+3')") > >> 625 loops, best of 3: 686 µs per loop > >> sage: timeit("pari('2+3')") > >> 625 loops, best of 3: 5.64 µs per loop > > >> Seriously? 686 microseconds to do 2+3? Our PARI C library > >> interface does that in 5.64 microseconds. > > > You may want to check your settings. Here I have with Python 2.7 / > > R-2.13 / rpy2-2.2.0beta3 : > > >>>> import timeit > >>>> t = timeit.Timer(stmt="R('1+2')", setup="import rpy2.robjects; R = > >>>> rpy2.robjects.r") > >>>> print "%.2f usec/pass" % (10000 * t.timeit(number=1000)/1000) > > 1.37 usec/pass > > I get the same horrible timings (around 305 microseconds) on Linux as > well, so it's not some trivial setting issue. > From your benchmark, the problem must be either the version of R, > Python, or rpy2 that we > ship with Sage. All are older than the versions you're testing above. > I'm very glad that > there is some future version of rpy2 where it isn't so slow; thanks > for letting me know.
Note that the rpy2.robjects layer is trading performances for convenience, and is implemented in pure Python. When after speed, the rpy2.rinterface layer is closer to the C-level interface. >>> t = timeit.Timer(stmt="res = reval(rparse('1+2'))", setup="import >>> rpy2.rinterface as ri; ri.initr(); rparse = ri.parse; reval = >>> ri.baseenv['eval']") >>> print "%.2f usec/pass" % (10000 * t.timeit(number=1000)/1000) 0.17 usec/pass > I hope somebody will update rpy2 (and/or) in Sage. > > -- William -- To post to this group, send an email to sage-devel@googlegroups.com To unsubscribe from this group, send an email to sage-devel+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sage-devel URL: http://www.sagemath.org