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

时间:2016-08-08 13:58:21

标签: python r rpy2 bioconductor

我在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:模块'hgu133a.db'没有属性'select'

我搜索了文档(?select),据我所知,数据库 hgu133a.db AnnotationDbi <继承select方法/ strong> class。

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

2 个答案:

答案 0 :(得分:1)

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

rpy2&#39; s importr()正试图帮助确定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对象。)

答案 1 :(得分:0)

显然上面有两个问题。首先,应使用 AnnotationDbi 来解析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')