Skip to main content

Interoperate R with Python

Project description

Interoperate R with Python

CircleCI Build status pypi

from rchitect import *
rcopy(reval("R.version"))

Installation

# install released version
pip install -U rchitect

# or the development version
pip install -U git+https://github.com/randy3k/rchitect

Why?

Why another R interface when there is rpy2?

  1. rchitect is 100% python

rchitect is primarily used by radian which is an alternate R console. rpy2 was not an option because it requires compilations and who wants to compile!?

  1. rchitect is portable

At stated above, rpy2 requires tool chains to install which makes it not portable. rchitect on the other hand is lightweight and portable.

  1. rchitect is lightweight

rpy2 supports a large number of python and R packages, such as numpy, scipy, ggplot2 etc. But there are situations a user may just want to compute a simple thing from R. Additionally, I found that the interface of rpy2 is not very discoverable.

  1. rchitect is a brother of RCall.jl

I am the same developer behind the Julia package RCall.jl which allows Julia to communicate with R. rchitect and RCall.jl share a very similar design. For example, rcopy(reval("1")) works for both rchitect and RCall.jl.

  1. rchitect is compatible with reticulate. Objects can be converted seamlessly between rchitect and reticulate. Check the section for reticuate below.

FAQ

Sometimes, rchitect may fail to open the shared library.

  • On Linux

First, try to expose R to PATH.

export R_HOME=/usr/local/lib/R

Note that it should be the path to R_HOME, not the path to the R binary. The folder should contain a file called COPYING. In some cases, you may need to futher specify LD_LIBRARY_PATH,

$ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:`R RHOME`/lib"
  • On Windows

Make sure that the path(s) to R.exe and R.dll is in the PATH variable.

Very minimal API

from rchitect import *
  • reval - evaluate an R expression in the global environment
a = reval("1:5")
  • rcopy - convert any RObject returned by reval to its python type
b = rcopy(a)
  • robject - convert any python object to its R type
c = robject(b)
  • rcall - call an R function. Python objects are converted to RObjects implicitly.
d = rcall("sum", c)

reticulate

Python Side

# some preparation work
# Unix users may need this PR: https://github.com/rstudio/reticulate/pull/279
# Windows + Python 2.7 users may need this PR: https://github.com/rstudio/reticulate/pull/335
# See also https://github.com/randy3k/radian#how-to-specify-r_home-location

from rchitect import *

reval("library(reticulate)");
py_object = reval("r_to_py(LETTERS)")
rcopy(py_object)

class Foo(object):
    pass

foo = Foo()
rcall("r_to_py", robject(foo))

R side

library(reticulate)
py_run_string("from rchitect import *")
r_object = py_eval("reval('LETTERS')")
py_to_r(r_object)

py_run_string("class Foo(object): pass")
py_run_string("foo = Foo()")
py_object = py_eval("robject(foo)")
r_to_py(py_to_r(py_object))

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rchitect-0.2.3.tar.gz (23.7 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page