在将java.util.Locale.UK
与Short Date
12/08/2018
Formatted Date
Sunday, August 12, 2018
R包(rpy2
)中的内置数据集一起使用时,出现以下错误:
synthpop
我将问题深入到具有空条目的列中,例如这样做时会收到相同的错误,但相邻行或列却没有:
SD2011
我确认这是一个空值,
robjects.r('head(SD2011)')
# ...
# ValueError: codes need to be between -1 and len(categories)-1
为什么robjects.r('SD2011[3, 27]')
无法正常处理?
Here's my notebook贯穿其中。
答案 0 :(得分:1)
为什么rpy2无法正常处理?
这似乎是在将R因子转换为带有2.9.x版本的rpy2的熊猫的过程中触发的错误(开发分支default
,将来的3.0.x版本没有此问题)。具体在执行以下操作:
res = pandas.Categorical.from_codes(numpy.asarray(obj) - 1,
categories = obj.do_slot('levels'),
ordered = 'ordered' in obj.rclass)
R个“因数”对象是整数向量,每个整数都是“级别”的关联向量中的索引。转换器只是减去一个,因为R数组是一个索引,而Python数组是零索引,但是只要有缺失值(NA)就会中断,因为R使用特定的整数来编码缺失的整数(一个极值),并且Python,numpy和pandas对此没有等效功能。
我打开了一个issue to track this,同时,解决方法是将R侧的NA替换为一个水平(并称其为“缺失”或“ NA”),将因子更改为字符串数组,或修改R因子的熊猫转换器。例如:
robjects.r("""
SD2011_nofactor <- SD2011 %>%
dplyr::mutate_if(is.factor,
funs(as.character(.))
""")
(或使用rpy2's Pythonic interface to dplyr)
注意:
在执行操作时很少成功发生:
robjects.r('SD2011[3, 27]')
SD2011[3, 27]
被评估如果不确定,发现以下哪个Python语句第一个失败可以告诉它:
评估R代码(添加的TRUE
是为了防止评估返回
x
。
robjects.r('x <- SD2011[3, 27]; TRUE')
获取从上面的评估中获得的对象x
并将其绑定到Python符号(转换将被应用)。
x = robjects.r('x')
显示已转换对象的文本表示形式
repr(x)