使用rpy2在Python中使用R select函数

时间:2015-10-16 18:01:01

标签: python r rpy2 bioconductor

我试图使用BioconductoR软件包org.Hs.eg.db(这是一个S4对象)将UniProt登录号转换为Entrez ID。我也尝试使用rpy2作为Python脚本的一部分。调用select函数会给我带来错误。这是代码(程序是400行,我是摘录相关内容):

from rpy2.robjects.packages import importr
from rpy2.robjects import StrVector, DataFrame, r

# get UniProt accension numbers from first two columns of data
uniprotA = []
uniprotB = []
for row in interactions:
    uniprotA.append(row[0][10:])
    uniprotB.append(row[1][10:])
# convert to vectors in r
uniprotA = StrVector(uniprotA)
uniprotB = StrVector(uniprotB)

homosap = importr('org.Hs.eg.db')

geneidA = r.select(homosap, keys = uniprotA, columns = "ENTREZID", keytype="UNIPROT")

以下是错误消息:

Traceback (most recent call last):
  File "mitab_preprocess.py", line 356, in <module>
    reformat_data(interactions)
  File "mitab_preprocess.py", line 140, in reformat_data
    geneidA = r.select(homosap, keys = uniprotA, columns = "ENTREZID", keytype="UNIPROT")
  File "//anaconda/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 178, in __call__
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
  File "//anaconda/lib/python2.7/site-packages/rpy2/robjects/functions.py", line 102, in __call__
    new_args = [conversion.py2ri(a) for a in args]
  File "//anaconda/lib/python2.7/site-packages/singledispatch.py", line 210, in wrapper
    return dispatch(args[0].__class__)(*args, **kw)
  File "//anaconda/lib/python2.7/site-packages/rpy2/robjects/conversion.py", line 60, in _py2ri
    raise NotImplementedError("Conversion 'py2ri' not defined for objects of type '%s'" % str(type(obj)))
NotImplementedError: Conversion 'py2ri' not defined for objects of type '<class 'rpy2.robjects.packages.InstalledSTPackage'>'

1 个答案:

答案 0 :(得分:0)

homosap是一个作为Python命名空间公开的R包。

我认为您希望将中的对象用作参数,而不是命名空间。

这里应该是homosap.org_Hs_eg_db(我猜,我还没试过)。

这里有很多事情要发挥作用:

  • .不是Python变量名的语法有效符号,因此rpy2将其翻译为_
  • 导入R包时,其所有符号都会添加到搜索路径中。如果来自Python,这有点像from <package> import *rpy2&#39; s importr正在返回一个名称空间,其中包的符号作为属性公开。