注释DB在rpy2中没有'select'方法

Annotation DB has no 'select' method in rpy2

我在 R 中有以下代码:

require(hgu133a.db)

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

其中 probeNames 是与在此数据库中找到的探测器相对应的字符串列表。

我正在尝试使用 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 继承了一个 select 方法来自 AnnotationDbi class.

如何正确解析 select() 来自的库,以便我可以在 Python 中使用它?

显然上面有两个问题。首先,应该使用A​​nnotationDbi来解析select()方法。其次,hgu133a_db 是一个 InstallSTPackage 对象 - 而必须使用 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')

[应该是对@merv 的回答的评论,但超出了字符数]

rpy2importr() 试图帮助明确 R 对象来自哪个包名称空间,而 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 对象。