1

我正在尝试使用 python 将变量定义为字符串,特别是文件的路径。然后我希望 python 将该字符串传递给 R 变量。然后我想使用 R 的 read.table 函数将该文件的内容作为表写入 R 中的变量。我正在使用 rpy2 和 r.assign 来完成此操作,但我无处可去。任何帮助,将不胜感激!我收到的错误消息粘贴在代码下方。

import os
import sys
from rpy2.robjects import r
import rpy2.robjects as robjects
from rpy2.robjects import *

r = robjects.r

known_genes = str(raw_input('Path to file containing gene coordinates? '))
anno_genes = str(raw_input('Path to gene:ilmn ID mapping file? '))
ms_meta = str(raw_input('Path to GWAS MS Meta Data file? '))
SNP_ID = str(raw_input('SNP Identifier? '))
SNP_dir = str(raw_input('SNP results directory? '))


r.assign('known.genes', known_genes)
r.assign('anno.genes', anno_genes)
r.assign('ms.meta', ms_meta)
r.assign('SNP', SNP_ID)
r.assign('SNP_dir', SNP_dir)

knowngenes = r('read.table("known.genes", header=T, as.is=T)')
annogenes = r('read.table("anno.genes", header=T, as.is=T)')



Error in file(file, "rt") : cannot open the connection
In addition: Warning message:
In file(file, "rt") :
  cannot open file 'known.genes': No such file or directory
Traceback (most recent call last):
  File "plot.py", line 24, in <module>
    knowngenes = r('read.table("known.genes", header=T, as.is=T)')
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rpy2-2.3.8-py2.7-macosx-10.6-intel.egg/rpy2/robjects/__init__.py", line 240, in __call__
    res = self.eval(p)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rpy2-2.3.8-py2.7-macosx-10.6-intel.egg/rpy2/robjects/functions.py", line 86, in __call__
    return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/rpy2-2.3.8-py2.7-macosx-10.6-intel.egg/rpy2/robjects/functions.py", line 35, in __call__
    res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in file(file, "rt") : cannot open the connection

解决:

knowngenes = r('read.table("known.genes", header=T, as.is=T)')

应该只是

knowngenes = r('read.table(known.genes, header=T, as.is=T)')

Python 将 "" 解释为字符串(尽管 R 会将它们解释为变量)。结果,Python 将字符串“known.genes”传递给 r 函数,而不是存储在 known.genes 中的“文件路径”。

4

2 回答 2

1
knowngenes = r('read.table("known.genes", header=T, as.is=T)')

应该只是

knowngenes = r('read.table(known.genes, header=T, as.is=T)')

Python 将 "" 解释为字符串(尽管 R 会将它们解释为变量)。结果,Python 将字符串“known.genes”传递给 r 函数,而不是存储在 known.genes 中的“文件路径”。

于 2013-11-11T19:03:58.070 回答
0

异常表示运行R时发生错误,RRuntimeError这里的消息告诉它无法打开连接(文件)

变量名称和变量内容之间可能存在混淆。写的时候

knowngenes = r('read.table("known.genes", header=T, as.is=T)')

它严格等同于用 R 编写

knowngenes = read.table("known.genes", header=T, as.is=T) 

并且您之前拥有的代码告诉您文件的名称在一个名为known.genes.

我建议重写这样的代码(并尽量减少您在 R 全局环境中存储的对象数量):

from rpy2.robjects.packages import importr
utils = importr('utils')

mydataframe = utils.read_table(myfilename, header=True, as_is=True)
于 2013-11-11T00:48:38.380 回答