Skip to main content

Python-to-R interoperability engine with environment management, type-safe conversions, data normalization, and safe R function execution.

Project description

rpy-bridge

rpy-bridge is a Python-to-R a robust interoperability engine that combines environment management, type-safe conversions, data normalization, and safe function execution to make Python-R collaboration seamless.

It enables Python developers to call R functions, scripts, and packages safely while preserving type fidelity and project-specific R environments. This is ideal for bilingual teams where R authors maintain core logic, and Python-centric users need reliable access without rewriting code.

Latest release: rpy-bridge on PyPI


Key layers and capabilities

1. Lazy and robust R integration

  • Automatically detects or sets R_HOME and ensures rpy2 is installed.
  • Configures platform-specific dynamic library paths for macOS/Linux.

2. Environment management

  • Activates renv projects and loads project-specific libraries if it exists, otherwise use current environemnt.
  • Sources .Renviron and .Rprofile files to replicate the R project environment in Python.

3. Python ↔ R type conversion

  • Converts Python scalars, lists, dicts, and pandas DataFrames into appropriate R objects.
  • Converts R atomic vectors, ListVector/NamedList, and data.frames back into Python-native objects.
  • Handles nested structures, mixed types, and missing values robustly (NA_* → None/pd.NA).

4. Data hygiene and normalization

  • Post-processes R DataFrames: fixes dtypes, numeric/date conversions, and timezone issues.
  • Normalizes and aligns column types for accurate Python comparisons.
  • Supports comparing Python and R DataFrames with mismatch diagnostics.

5. Function calling

  • Calls functions from R scripts, base R, or installed packages safely.
  • Automatically converts arguments and return values, including keyword arguments.
  • Supports mixed data types, nested structures, and DataFrames seamlessly.

6. Python-first workflow for R code

  • Enables Python developers to reuse R functions without needing deep R knowledge.
  • Keeps network, token, and SSL concerns outside the package when sourcing scripts locally.
  • Designed for reproducibility and safe execution in CI or cross-platform environments.

Installation

Prerequisites

  • System R installed and available on PATH (rpy2 requires a working R installation).
  • Python 3.12+

From PyPI:

Install rpy-bridge with rpy2 for full R support

python3 -m pip install rpy-bridge rpy2

or using uv:

uv add rpy-bridge rpy2

During development (editable install):

python3 -m pip install -e .

or using uv:

uv sync

Required Python packages (the installer will pull these in):

  • rpy2 (GPLv2 or later)
  • pandas
  • numpy

Usage

from pathlib import Path
from rpy_bridge import RFunctionCaller

rfc = RFunctionCaller(
    path_to_renv=Path("/path/to/project"),
    script=Path("/path/to/script.R"),
)

summary_df = rfc.call("summarize_cohort", cohort_df)

Round-trip Python ↔ R behavior

rpy-bridge attempts to convert Python objects to R and back. Most objects used in scientific/ML pipelines round-trip cleanly, but some heterogeneous Python structures may be wrapped or slightly altered. This is normal due to R's type system.

Python type Round-trip fidelity Notes
int, float, bool, str ✅ High Scalars convert directly
Homogeneous list of numbers/strings/booleans ✅ High Converted to atomic R vectors
Nested lists of homogeneous types ✅ High Converted to nested R ListVector
pandas.DataFrame / pd.Series ✅ High Converted to data.frame / R vector, post-processed back
Mixed-type list or heterogeneous dict ⚠️ Partial Elements wrapped in single-element vectors; round-trip may alter type
Python None / pd.NA ✅ High Converted to R NULL

Guidance

  • Typical workflows (DataFrames, numeric arrays, series, homogeneous lists) are fully supported.
  • Rare or highly heterogeneous Python objects may not round-trip perfectly.
  • Round-trip fidelity is mainly a “nice-to-have” for debugging. For production pipelines, it’s safe to focus on supported types.

Examples

Basic — run a local R script

from pathlib import Path
from rpy_bridge import RFunctionCaller

project_dir = Path("/path/to/your-r-project")
script = project_dir / "scripts" / "example.R"

caller = RFunctionCaller(path_to_renv=project_dir, script_path=script)
result = caller.call("some_function", 42, named_arg="value")
print(type(result))

Call installed R packages (no local script)

from rpy_bridge import RFunctionCaller

caller = RFunctionCaller(path_to_renv=None, packages=["stats"])
samples = caller.call("rnorm", 5, mean=10)
print(type(samples))  # typically a numpy.ndarray

median_val = caller.call("stats::median", samples)
print(median_val)

R Setup

If you plan to execute R code with rpy-bridge, use the helper scripts in examples/r-deps/ to prepare an R environment.

  • On macOS (Homebrew) install system deps:
bash examples/r-deps/install_r_dev_deps_homebrew.sh
  • Initialize a project renv (run in an R session):
source("examples/r-deps/setup_env.R")
  • Restore the environment on a new machine:
renv::restore()

Collaboration note

This repository provides example R setup scripts for teams working across Python and R. Each project may require different R packages — check the package list in examples/r-deps/setup_env.R and commit a renv.lock for project-specific reproducibility.

Clone repositories containing R scripts locally or use your preferred tooling to obtain scripts before execution.


Licensing

  • rpy-bridge is released under the MIT License © 2025 Victoria Cheung.
  • The project depends on rpy2 which is licensed under the GNU General Public License v2 (or later).

Thanks

This package was spun out of internal tooling at Revolution Medicines. Many thanks to the team there for allowing the code to be open sourced.

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

rpy_bridge-0.4.0.tar.gz (23.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rpy_bridge-0.4.0-py3-none-any.whl (18.2 kB view details)

Uploaded Python 3

File details

Details for the file rpy_bridge-0.4.0.tar.gz.

File metadata

  • Download URL: rpy_bridge-0.4.0.tar.gz
  • Upload date:
  • Size: 23.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.11

File hashes

Hashes for rpy_bridge-0.4.0.tar.gz
Algorithm Hash digest
SHA256 d3dd74812f23a9c8612ebfb6991e1611135746cb8067370e54f81e1847f4d2a2
MD5 c16caf2785f88ff2335168a766bd61d1
BLAKE2b-256 9a20b602927cdb4592456ade05bc7ab8b37dd6d7f7e6e90fe3cec8611d6af8cd

See more details on using hashes here.

File details

Details for the file rpy_bridge-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: rpy_bridge-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 18.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.11

File hashes

Hashes for rpy_bridge-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 240334cc83c66c638383ae263e19c6152b49c92a641400af5dd71fc631d5a0c5
MD5 6da570cb820cbdbd90ae0bc3e407aa21
BLAKE2b-256 29e7109ae5c3431aa136697687e5f8e79fd9a30f33f142e4675a8a07a1ee02a3

See more details on using hashes here.

Supported by

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