2017-09-02 57 views
1

如何按名稱訪問指定列表的元素?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個不同的功能,並且每個返回不同的順序。

回答

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)] 
+0

噢,有一個'.rx2'訪問器!我不知道這件事。沒有在文檔中找到它。謝謝! – Kartik

+0

這裏簡單地提到:http://rpy2.readthedocs.io/en/version_2.8.x/vector.html#extracting-r-style(儘管目前沒有代碼示例) – lgautier