如何按名称访问命名列表的元素?
我有3个函数,所有函数都返回ListSexpVector
个类htest
。其中一个元素有5个元素['method', 'parameter', 'statistic', 'p.value', 'data.name']
,其他元素有不同的数字和顺序。我有兴趣从此列表中提取p.value
,statistic
和parameter
。在R中我可以使用$
,如下所示:
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个不同的函数,每个函数返回不同的顺序。
答案 0 :(得分:2)
高级接口旨在提供更友好的接口,因为低级接口非常接近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)]