批注数据库在rpy2中没有“select”方法

2024-06-25 06:40:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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.dbAnnotationDbi类继承了一个select方法。你知道吗

如何正确解析select()来自的库,以便在Python中使用它?你知道吗


Tags: 字符串代码from数据库列表dbrequireselect
2条回答

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

rpy2importr()试图帮助a明确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对象)。你知道吗

显然,上述问题有两个。首先,应该使用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')

相关问题 更多 >