我在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中使用它?
答案 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')