打印 AIC 结果缺少信息

Printing AIC results is missing information

每当我尝试从 rpy2 打印 AIC 结果时,一些琐碎的信息会在显示中丢失。以 R help(AIC):

为例
import rpy2.robjects.conversion as cv
from rpy2.robjects import Formula, default_converter, pandas2ri
from rpy2.robjects.packages import importr, data

r_stats = importr("stats")

datasets = importr("datasets")
swiss = data(datasets).fetch("swiss")["swiss"]

lm1 = r_stats.lm(Formula("Fertility ~ ."), data=swiss)
lm2 = r_stats.update(lm1, Formula(". ~ . -Examination"))

with cv.localconverter(default_converter + pandas2ri.converter):
    aic = r_stats.AIC(lm1, lm2)

打印 aic 对象,我得到:

In [2]: aic
Out[2]: 
                                                     df         AIC
list(c(66.9151816789687, -0.172113970941455, -0...  7.0  326.071568
list(c(62.1013115551538, -0.154617487544675, -0...  6.0  325.240844

而在 R 中,打印为:

>     df   AIC
lm1  7 326.1
lm2  6 325.2

鉴于模型是按 AIC 排序的,识别由 R 打印的模型很重要,但这在 rpy2 中丢失了。有更好的解决方案吗?

这是因为 a) data 对象是匿名的(就 R 而言,传递给它的 Python 对象 swiss 只是一个数据结构没有关联的 symbol/name,并且 b) R 函数 lm 喜欢使用未评估的参数来报告有关模型的信息。

有多种方法可以解决此问题。 rpy2 开发版本的文档涵盖了这一点:

https://rpy2.github.io/doc/latest/html/robjects_environments.html#environments-as-temporary-local-contexts