我正在使用 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')
~\anaconda3\lib\site-packages\IPython\core\interactiveshell.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:\Users\steph\anaconda3\lib\site-packages\decorator.py:decorator-gen-131> in R(self, line, cell, local_ns)
~\anaconda3\lib\site-packages\IPython\core\magic.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):
~\anaconda3\lib\site-packages\rpy2\ipython\rmagic.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)
~\anaconda3\lib\site-packages\rpy2\robjects\functions.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\{(.+?)\}')
~\anaconda3\lib\site-packages\rpy2\robjects\functions.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():
~\anaconda3\lib\site-packages\rpy2\robjects\functions.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():
~\anaconda3\lib\functools.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')
~\anaconda3\lib\site-packages\rpy2\robjects\numpy2ri.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"
~\anaconda3\lib\functools.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')
~\anaconda3\lib\site-packages\rpy2\robjects\conversion.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'>'
有人知道这是什么意思吗?
提前谢谢您
斯蒂芬
最佳答案
实际上我做了一些测试。因为这个东西存在的一个最大好处是我们可以用一种语言创建或操作对象或数据并将其传递给另一种语言(例如执行更多操作)。 显然,这取决于我如何在 python 中创建对象(我是 python 新手,我在 R 中更好)。 但现在两者都
%R -o R_object
和
%R -i python_object
工作顺利。但我没有检查几个不同的对象(矩阵等......)。我想我需要更多地使用它来更好地理解,但基本上它是有效的:)
祝你有美好的一天
斯蒂芬
关于python - rpy2 在 jupyter 实验室中将 python 对象转换为 R 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65643579/