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

标签 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')

~\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/

相关文章:

R dplyr::mutate with ifelse 以全局变量为条件回收第一行的结果

r - 如何让dput删除多余的数据?

Rcpp:错误:与请求的类型不兼容

python - 在tensorflow中将所有0值图像像素转换为255

javascript - Google map 屏幕截图不适用于使用 html2canvas 的标记和标记集群

python - 如何替换两个或多个重复的 :punct: using re in python?

r - 如何根据R中列值的范围拆分数据帧?

r - 如何获取列表中至少包含一次元素的向量的数量?

python - 如何在 django 中创建字典键值对

python - 网页抓取时如何将数据写入 csv 中的新列?