【问题标题】:How to convert None to R NULL如何将 None 转换为 R NULL
【发布时间】:2021-01-18 22:40:52
【问题描述】:

在阅读Mapping rpy2 objects to arbitrary python objects 之后,我认为以下内容可以将 Python None 转换为 R NULL:

import rpy2.robjects.conversion as cv
import rpy2.robjects as robjs
from rpy2.robjects import default_converter
from rpy2.robjects.packages import importr

r_base = importr("base")


def _none2null(none_obj):
    return robjs.r("NULL")


none_converter = cv.Converter("None converter")
none_converter.py2rpy.register(None, _none2null)

with cv.localconverter(default_converter + none_converter):
    filesl = r_base.list_files(pattern=None)

但是,Trace 失败了:

NotImplementedError: Conversion 'py2rpy' not defined for objects of type '<class 'NoneType'>'

如何处理?

【问题讨论】:

  • 这能回答你的问题吗? Convert NULL from Python to R using rpy2
  • 不,很遗憾。在转换器函数中使用 robjs.NULL 得到相同的结果
  • 这是一个很好的问题,因为 rpy2 用户可能希望将他们的 Nones 自动转换为 NANULL 或其他 R 构造。转换器在这里是正确的模式,与@PacketLoss 链接的问题中的手动转换不同

标签: python rpy2


【解决方案1】:

Converter.register() 方法接受要转换的对象的类型作为第一个参数,但您传递了一个实例。 NoneNoneType 的一个实例:

NoneType = type(None)
NoneType() is None   # True

你需要为NoneType定义转换,所以你可以使用:

none_converter.py2rpy.register(type(None), _none2null)

【讨论】:

  • 谢谢,这很有用!
猜你喜欢
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-31
  • 1970-01-01
  • 2019-09-02
  • 2021-10-07
  • 2016-11-29
相关资源
最近更新 更多