anndata icon indicating copy to clipboard operation
anndata copied to clipboard

reticulate 1.36 breaks anndata R

Open KaiWaldrant opened this issue 1 year ago • 3 comments

Anndata throws an error when trying to access for example .obs: Error: Expected a python object, received a character

Might be related to rstudio/reticulate#1531

KaiWaldrant avatar Apr 18 '24 11:04 KaiWaldrant

Thanks for reporting this! Here is a minimum reproducible example:

library(anndata)

ad <- AnnData(
  X = matrix(0:5, nrow = 2),
  obs = data.frame(group = c("a", "b"), row.names = c("s1", "s2")),
  var = data.frame(type = c(1L, 2L, 3L), row.names = c("var1", "var2", "var3")),
  layers = list(
    spliced = matrix(4:9, nrow = 2),
    unspliced = matrix(8:13, nrow = 2)
  )
)

adpy <- ad$.__enclos_env__$private$.anndata

adpy$obs
#    group
# s1     a
# s2     b

reticulate::py_to_r(adpy$obs)
# Error: Expected a python object, received a character

class(adpy$obs)
# [1] "pandas.core.frame.DataFrame"        "pandas.core.generic.NDFrame"        "pandas.core.base.PandasObject"      "pandas.core.accessor.DirNamesMixin"
# [5] "pandas.core.indexing.IndexingMixin" "pandas.core.arraylike.OpsMixin"     "python.builtin.object"

rcannood avatar Apr 18 '24 15:04 rcannood

Here's an even smaller example:

library(reticulate)

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

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

rcannood avatar Apr 18 '24 15:04 rcannood

This issue was fixed by rstudio/reticulate#1592 and will be included in the next release of reticulate.

For the time being, users encountering this issue can switch to the latest version of reticulate by running install.packages("devtools"); devtools::install_github("rstudio/reticulate") or install.packages("pkg"); pkg::pkg_install("rstudio/reticulate").

rcannood avatar Apr 18 '24 19:04 rcannood

Fixed in reticulate 1.36.1

rcannood avatar Jul 08 '24 06:07 rcannood