Skip to content

Conversion scope does not work in py_to_r.pandas.core.frame.DataFrame #1591

@rcannood

Description

@rcannood

With reticulate 1.36.0, py_to_r.pandas.core.frame.DataFrame seems to no longer listen to its conversion scope.

This becomes an issue when using the anndata R package, which defines a py_to_r.pandas.core.indexes.base.Index function. As such, a round trip conversion from data.frame to a pandas DataFrame no longer works with reticulate 1.36, whereas this did use to work with reticulate 1.35.

Minimum reproducible example

# check out reticulate origin/main
devtools::load_all(".")

df <- data.frame(
  row.names = c("s1", "s2"),
  group = c("a", "b")
)
py_to_r(r_to_py(df))
#    group
# s1     a
# s2     b

library(anndata)

py_to_r(r_to_py(df))
# Error: Expected a python object, received a character

Error does not occur with Reticulate v1.35

# check out reticulate v1.35.0
devtools::load_all(".")

df <- data.frame(
  row.names = c("s1", "s2"),
  group = c("a", "b")
)
py_to_r(r_to_py(df))
#    group
# s1     a
# s2     b

library(anndata)

py_to_r(r_to_py(df)) # works as intended
#    group
# s1     a
# s2     b

Proposed solution

This issue is related to dynverse/anndata#28. I could implement a fix in anndata by removing the anndata::py_to_r.pandas.core.indexes.base.Index function. However, I feel like reticulate::py_to_r.pandas.core.frame.DataFrame should not be affected by the existence of the anndata py_to_r function, or am I mistaken?

Thanks for your input!

Kind regards,
Robrecht

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions