Skip to content

localconverter errorΒ #61

Open
Open
@le-ander

Description

Hi Phil!

I just tried to convert my jupyter anndata2ri usage to a normal python script (i.e. using localconverter rather than ipython cell magics). I am, however, hitting an unexpected error.

So this works fine:

import anndata2ri
anndata2ri.activate()
%load_ext rpy2.ipython
%%R -o sce
library(Seurat)
load("tissue.rdata")
new_obj = CreateSeuratObject(counts = tissue@raw.data)
new_obj@meta.data = tissue@meta.data
sce <- as.SingleCellExperiment(new_obj)

sce in my python namespace is a now a neat AnnData object, as expected.
However trying to do the same with locaconverter gives me an error:

import anndata2ri
from rpy2.robjects import r
from rpy2.robjects.conversion import localconverter

with localconverter(anndata2ri.converter):
    adata = r('''
library(Seurat)
load("tissue.rdata")
new_obj = CreateSeuratObject(counts = tissue@raw.data)
new_obj@meta.data = tissue@meta.data
as.SingleCellExperiment(new_obj)
''')
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-2-fc7a6d222ec5> in <module>
      4 
      5 with localconverter(anndata2ri.converter):
----> 6     adata = r('''
      7 library(Seurat)
      8 load("/storage/groups/ml01/datasets/projects/20200101_Various_SfairaDataRepository_leander.dony/raw/d10_1038_s41586_019_1631_3/tissue.rdata")

/opt/python/lib/python3.8/site-packages/rpy2/robjects/__init__.py in __call__(self, string)
    436     def __call__(self, string):
    437         p = rinterface.parse(string)
--> 438         res = self.eval(p)
    439         return conversion.rpy2py(res)
    440 

/opt/python/lib/python3.8/site-packages/rpy2/robjects/__init__.py in __getattribute__(self, attr)
    411 
    412         try:
--> 413             return self.__getitem__(attr)
    414         except LookupError:
    415             raise AttributeError(orig_ae)

/opt/python/lib/python3.8/site-packages/rpy2/robjects/__init__.py in __getitem__(self, item)
    417     def __getitem__(self, item):
    418         res = _globalenv.find(item)
--> 419         res = conversion.rpy2py(res)
    420         if hasattr(res, '__rname__'):
    421             res.__rname__ = item

/opt/python/lib/python3.8/functools.py in wrapper(*args, **kw)
    873                             '1 positional argument')
    874 
--> 875         return dispatch(args[0].__class__)(*args, **kw)
    876 
    877     funcname = getattr(func, '__name__', 'singledispatch function')

/opt/python/lib/python3.8/site-packages/rpy2/robjects/conversion.py in _rpy2py(obj)
    198     non-rpy2) objects.
    199     """
--> 200     raise NotImplementedError(
    201         "Conversion 'rpy2py' not defined for objects of type '%s'" %
    202         str(type(obj))

NotImplementedError: Conversion 'rpy2py' not defined for objects of type '<class 'rpy2.rinterface.SexpClosure'>'

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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