2016-08-08 11 views
0

には「選択」方法を有していないI Rに次のコードを持っている:probeNamesこのデータベースで見つかったプローブに対応する文字列のリストである注釈DBはrpy2

require(hgu133a.db) 

entrezIDs <- select(hgu133a.db, probeNames, "ENTREZID") 

私はrpy2を使ってPythonにそれを翻訳しようとしています:

from rpy2.robjects.packages import importr 
hgu133a_db = importr('hgu133a.db') 

entrez_ids = hgu133a_db.select(hgu133a_db, probe_names, 'ENTREZID') 

しかし、エラーが表示されます。

AttributeError: module 'hgu133a.db' has no attribute 'select'

私は私の知る限りのドキュメント(?select)を検索してきましたhgu133a.dbは、AnnotationDbiクラスからselectメソッドを継承します。

select()が来ているライブラリを正しく解決するにはどうすればよいですか?Pythonで使用できるのですか?

答えて

1

importr()

rpy2 [sの答えを、その数文字を超え@mervにコメントされている必要があります]」を支援しようとしていますRの一般的な使い方ははるかに少ないです(同じ名前の関数のどれに影響するRパッケージの読み込み順序などの厄介なものにつながる可能性があります)。実行される)。

importrとのトレードオフは、Rシンボルがどこから来ているかを知ることです。 rpy2には、与えられたR記号が定義されている場所(*)を見つけるのに役立つあまり知られていない関数があります:https://rpy2.readthedocs.io/en/version_2.8.x/robjects_rpackages.html#finding-where-an-r-symbol-is-coming-from

それ以外の場合は、r()を使用して、Rセッションでピックされるオブジェクト(*)を取得することもできます。

from rpy2.robjects import r 
r('select') 

(*:前述したように、セッションで先に読み込まれたRパッケージの順序は、どのRオブジェクトが選択されたかに影響を与える可能性があります)。

+0

Rライブラリをインポートした後、 'select = r( 'select')'を使うと完璧に動作します!抽象基本クラスを手動で追跡するよりもはるかに良い解決策です。 – merv

+0

どんな状況でも良くないかもしれません。 「Rが実行するものを実行する」ことを望むときには、もっと便利なことは確かにありますが、 'importr'によって作成された名前空間の使用は、より堅牢なコードを書くのに役立ちます(RパッケージがRにインポートされない、その順序で、潜在的に呼ばれる機能を変更する)。 – lgautier

0

明らかに上記に2つの問題があります。まず、AnnotationDbiを使用してselect()メソッドを解決する必要があります。次にhgu133a_dbInstallSTPackageオブジェクトです - 代わりにhgu133a_db.hgu133a_dbを使用する必要があります。それを一緒に入れて、RからのPythonへの変換は次のとおりです。

from rpy2.robjects.packages import importr 

annotation_dbi = importr('AnnotationDbi') 
hgu133a_db = importr('hgu133a.db') 

entrez_ids = annotation_dbi.select(hgu133a_db.hgu133a_db, probe_names, 'ENTREZID')