rpy2在jupyter实验室中将python对象转换为R对象



我正在使用rpy2库在jupyter实验室的同一笔记本电脑中同时使用R和python。所有操作都正常(首先我安装了R essential和第二个rpy2程序库(。

要加载库,我使用

%load_ext rpy2.ipython

在每个R代码之前,我使用

%%R

为了将R对象转换为python,我使用

%R -o R_object

为了将python对象转换为R,我使用

%R -i python_object

我的问题是最后一段代码(从python转换为R(。我有以下错误我不懂

---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-90-cc234320b667> in <module>
----> 1 get_ipython().run_line_magic('R', '-i python_object')
~anaconda3libsite-packagesIPythoncoreinteractiveshell.py in run_line_magic(self, magic_name, line, _stack_depth)
2315                 kwargs['local_ns'] = sys._getframe(stack_depth).f_locals
2316             with self.builtin_trap:
-> 2317                 result = fn(*args, **kwargs)
2318             return result
2319 
<C:Usersstephanaconda3libsite-packagesdecorator.py:decorator-gen-131> in R(self, line, cell, local_ns)
~anaconda3libsite-packagesIPythoncoremagic.py in <lambda>(f, *a, **k)
185     # but it's overkill for just that one bit of state.
186     def magic_deco(arg):
--> 187         call = lambda f, *a, **k: f(*a, **k)
188 
189         if callable(arg):
~anaconda3libsite-packagesrpy2ipythonrmagic.py in R(self, line, cell, local_ns)
688                         raise NameError("name '%s' is not defined" % input)
689                 with localconverter(converter) as cv:
--> 690                     ro.r.assign(input, val)
691 
692         tmpd = self.setup_graphics(args)
~anaconda3libsite-packagesrpy2robjectsfunctions.py in __call__(self, *args, **kwargs)
176                 v = kwargs.pop(k)
177                 kwargs[r_k] = v
--> 178         return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
179 
180 pattern_link = re.compile(r'\link{(.+?)}')
~anaconda3libsite-packagesrpy2robjectsfunctions.py in __call__(self, *args, **kwargs)
100 
101     def __call__(self, *args, **kwargs):
--> 102         new_args = [conversion.py2ri(a) for a in args]
103         new_kwargs = {}
104         for k, v in kwargs.items():
~anaconda3libsite-packagesrpy2robjectsfunctions.py in <listcomp>(.0)
100 
101     def __call__(self, *args, **kwargs):
--> 102         new_args = [conversion.py2ri(a) for a in args]
103         new_kwargs = {}
104         for k, v in kwargs.items():
~anaconda3libfunctools.py in wrapper(*args, **kw)
838                             '1 positional argument')
839 
--> 840         return dispatch(args[0].__class__)(*args, **kw)
841 
842     funcname = getattr(func, '__name__', 'singledispatch function')
~anaconda3libsite-packagesrpy2robjectsnumpy2ri.py in nonnumpy2ri(obj)
119         # For now, go with the default_converter.
120         # TODO: the conversion system needs an overhaul badly.
--> 121         return ro.default_converter.py2ri(obj)
122     else:
123         # The conversion module was "activated"
~anaconda3libfunctools.py in wrapper(*args, **kw)
838                             '1 positional argument')
839 
--> 840         return dispatch(args[0].__class__)(*args, **kw)
841 
842     funcname = getattr(func, '__name__', 'singledispatch function')
~anaconda3libsite-packagesrpy2robjectsconversion.py in _py2ri(obj)
58     (ri) objects.
59     """
---> 60     raise NotImplementedError("Conversion 'py2ri' not defined for objects of type '%s'" % str(type(obj)))
61 
62 def _py2ro(obj):
NotImplementedError: Conversion 'py2ri' not defined for objects of type '<class 'tuple'>'

有人知道这意味着什么?

提前感谢

Stéphane

实际上我做了一些测试。因为这种东西的存在,最大的好处之一是我们可以用一种语言创建或操作对象或数据,并将其传递给另一种语言(例如,进行更多操作(。显然,这取决于我如何在python中创建对象(我是python新手,我在R中更擅长(。但现在两个

%R -o R_object

%R -i python_object

工作良好。但我没有检查几个不同的对象(矩阵等(。我想我需要更多地使用它来更好地理解,但基本上它是有效的:(

祝度过美好的一天

Stéphane

%R/%%R已记录在案。尝试:

%load_ext rpy2.ipython
?%%R

rpy2文档中还有一个专门用于笔记本电脑的部分:

https://rpy2.github.io/doc/v3.4.x/html/generated_rst/notebooks.html

最新更新