A minimal R API for Python
Project description
Minimal R API for Python
import rchitect
from rchitect import rcopy, reval
rchitect.start()
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
?
rchitect
is 100% python
rchitect
is primarily used by rtichoke
which is an alternate R console. rpy2
was not an option because it requires compilations and who wants to compile!?
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.
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.
rchitect
is a brother ofRCall.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
.
rchitect
is compatible withreticulate
. Objects can be converted seamlessly betweenrchitect
andreticulate
. Check the section forreticuate
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
import rchitect
rchitect.start()
from rchitect import rcopy, robject, reval, rcall
reval
- evaluate an R expression in the global environment
a = reval("1:5")
rcopy
- convert any RObject returned byreval
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)
R Eventloop in IPython
When running interactively in IPython, R events such as showing graphical
devices could be handled by the r
eventloop. Simply enter in IPython
%gui r
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/rtichoke#how-to-specify-r_home-location
import os
import sys
os.environ["RETICULATE_PYTHON"] = sys.executable
os.environ["RETICULATE_REMAP_OUTPUT_STREAMS"] = "0"
import rchitect
rchitect.start()
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("import rchitect")
py_run_string("rchitect.start()")
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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.