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:

python3 -m pip install rpy-bridge

or using uv:

uv add rpy-bridge

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

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

summary_df = caller.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.3.4.tar.gz (18.8 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.3.4-py3-none-any.whl (14.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: rpy_bridge-0.3.4.tar.gz
  • Upload date:
  • Size: 18.8 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.3.4.tar.gz
Algorithm Hash digest
SHA256 fb11f2a0b76cef4372ac183d35b7741573350788bf470d52ce23a2231d3810a3
MD5 7ca54c234510953d79cd5f43919c8d29
BLAKE2b-256 d2c5adaa74a85f6e1c11d3b093d36096ad1cb69aaf342f7ad15982569ec587e5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: rpy_bridge-0.3.4-py3-none-any.whl
  • Upload date:
  • Size: 14.3 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.3.4-py3-none-any.whl
Algorithm Hash digest
SHA256 340b13ea0ee324a8952a705cf5f8466b82e7ab0bbc0fad4ecd90838eb7ce993d
MD5 eac431541b9d0602ad4eaed3973a05ad
BLAKE2b-256 ad09b4e8c93b2a6ebdfd3e121d7773d898a1c4a0a9d519723c65d726e2238964

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