rpy2访问R按名称命名的列表项,低级接口

问题描述:

如何按名称访问指定列表的元素?rpy2访问R按名称命名的列表项,低级接口

我有3个函数,所有这些函数都返回类的ListSexpVector。其中一个有5个元素,['method', 'parameter', 'statistic', 'p.value', 'data.name'],其他人有不同的数字和顺序。我有兴趣从这个列表中提取p.valuestatisticparameter。在R I可以使用$,像这样:

p.value <- fit$p.value 
statistic <- fit$statistic 
param <- fit$parameter 

rpy2找到的最好的相当于是这样:

p_val = fit[list(fit.do_slot('names')).index('p.value')] 
stat = fit[list(fit.do_slot('names')).index('statistic')] 
param = fit[list(fit.do_slot('names')).index('parameter')] 

这是相当啰嗦。有更好的(更短,更甜,Pythonic)的方式吗?


有好的,老式的整数索引基础:

p_val = fit[3] 
stat = fit[2] 
param = fit[1] 

但当位置发生变化这是行不通的,因此是一个严重的限制,因为我安装3个不同的功能,并且每个返回不同的顺序。

高级接口旨在提供更友好的接口,因为低级接口非常接近R的C-API。有了它,我们可以这样做:

p_val = fit.rx2('p.value') 

p_val = fit[fit.names.index('p.value')] 

如果与低层次的接口工作,你将主要有实现自己的便利的包装重现这些功能。例如:

def dollar(obj, name): 
    """R's "$".""" 
    return obj[fit.do_slot('names').index(name)] 
+0

噢,有一个'.rx2'访问器!我不知道这件事。没有在文档中找到它。谢谢! – Kartik

+0

这里简单地提到:http://rpy2.readthedocs.io/en/version_2.8.x/vector.html#extracting-r-style(尽管目前没有代码示例) – lgautier