2017-09-02 2 views
1

名前付きリストの要素に名前でアクセスするにはどうすればよいですか?rpy2 access Rリスト項目の名前を名前、低レベルのインターフェイスで指定しました

私は3つの関数を持っていますが、これらの関数はすべてListSexpVectorクラスのhtestを返します。そのうちの1つに5つの要素、['method', 'parameter', 'statistic', 'p.value', 'data.name']があり、その他の番号と順序が異なります。このリストからp.value,statisticparameterを抽出したいと考えています。 Rで、私はそうのように、$を使用することができますかなり長いったらしいです

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')] 

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

私はrpy2で見つかった最良の同等は次のようになります。より良い(より短い、より甘い、Pythonic)方法がありますか?


あり

は良い昔ながらの整数ベースのインデックスです:

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

しかし、それは、位置が変更された場合は動作しませんので、私は別の3をフィッティングしていますので、深刻な制限であります各関数はそれぞれ異なる順序を返します。

答えて

2

ハイレベルのインターフェイスは、低レベルのインターフェイスがRのC-APIに非常に近いため、より親しみやすいインターフェイスを提供するためのものです。それによって1が行うことができます:

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

関連する問題