Type conversion¶
r_bridge converts values automatically when they cross the Python ↔ R boundary. All conversions are bidirectional.
Python → R¶
| Python type | R type |
|---|---|
None |
NULL |
bool |
logical(1) |
int |
integer(1) |
float |
numeric(1) |
str |
character(1) |
complex |
complex(1) |
float('nan') |
NaN |
float('inf') |
Inf |
list (homogeneous bools) |
logical vector |
list (homogeneous ints) |
integer vector |
list (homogeneous floats) |
numeric vector |
list (homogeneous strings) |
character vector |
dict |
named list() |
numpy.ndarray 1-D |
atomic vector (dtype determines R type) |
numpy.ndarray 2-D |
matrix |
pandas.DataFrame |
data.frame |
pandas.Series |
named vector |
pandas.Categorical |
factor |
datetime.datetime |
POSIXct (UTC) |
datetime.date |
Date |
R → Python¶
| R type | Python type |
|---|---|
NULL |
None |
logical(1) |
bool |
logical(n>1) |
numpy.ndarray(bool) |
integer(1) |
int |
integer(n>1) |
numpy.ndarray(int32) |
numeric(1) |
float |
numeric(n>1) |
numpy.ndarray(float64) |
character(1) |
str |
character(n>1) |
list[str] |
list (named) |
dict |
list (unnamed) |
list |
data.frame |
pandas.DataFrame |
matrix |
numpy.ndarray (2-D) |
factor |
pandas.Categorical |
Date |
datetime.date |
POSIXct / POSIXlt |
datetime.datetime (UTC) |
NA |
float('nan') / pd.NA / None (context-dependent) |
NaN |
float('nan') |
Inf / -Inf |
float('inf') / float('-inf') |
Overriding the default conversion¶
Pass result_type_hint to any get, call, or eval call to force a
specific output type:
# default: numpy array
r.call("c", 1, 2, 3)
# force a plain Python list
r.call("c", 1, 2, 3, result_type_hint="list")
# force a scalar
r.call("sum", [1, 2, 3], result_type_hint="scalar")
# skip deserialisation entirely
r.call("mean", [1, 2, 3], result_type_hint="raw")
# → {'__type__': 'numeric_scalar', 'value': 2.0}
Special value tagging¶
Values that have no direct JSON representation are transmitted as tagged dicts:
{"__type__": "integer", "value": 42}
{"__type__": "nan"}
{"__type__": "inf", "sign": 1}
{"__type__": "complex", "r": 1.0, "i": 2.0}
{"__type__": "na", "na_type": "real"}
{"__type__": "factor", "levels": ["a","b"], "codes": [0,1], "ordered": false}
{"__type__": "matrix", "nrow": 2, "ncol": 3, "data": [...], "byrow": true}
{"__type__": "dataframe", "columns": {...}}
{"__type__": "posixct", "iso8601": "2026-03-21T00:00:00Z"}
{"__type__": "date", "iso8601": "2026-03-21"}
Custom tags can be registered — see Advanced.