python - 使用 r.assign 将变量从 python 分配给 R,然后使用 read.table

标签 python r rpy2

我正在尝试使用 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 中的“文件路径”。

最佳答案

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 中的“文件路径”。

关于python - 使用 r.assign 将变量从 python 分配给 R,然后使用 read.table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19896618/

相关文章:

python - 函数参数名称中的别名(双重命名)

python - JSON 与 Pickle 安全性

r - 将 sjPlot::tab_model() 或其他 html 表的输出编织成 PDF 文档

python - 如何将 rpy2 ListVector (rpy2.robjects.vectors.ListVector) 转换为 python?

python - 如何在python中设置mfrow/mfcol

python - 使用 OpenCV 图像的 Flask 视频流

python - 在 Python 类中使用对象变量作为递归方法参数

r - 对列表的特定元素求和

r - R中整数类和数字类有什么区别

ubuntu - 在 Ubuntu 上安装 rpy2