从Python调用R脚本

时间:2015-03-05 00:04:10

标签: python r python-3.x

我用Python编写脚本。我想用R绘制一些图表。

当我运行以下代码时出现错误

import sys
import argparse
import os
import subprocess
parser = argparse.ArgumentParser(description=messg, prog='parser.py', 
    usage='%(prog)s -m [file.txt]')
parser.add_argument('-m', required=True, help='file.txt', type=argparse.FileType('r'))
parser.add_argument('-o', required=True, help='Save output to file', type=argparse.FileType('w'))

args = parser.parse_args()

for ln in args.m:
    prefix, proteins = ln.rstrip().split(':')
    proteins = proteins.split()
    args.o.write('%s\t' % prefix,)
args.o.write('\n')

subprocess.call("Rscript script.r"+args.o, shell=True)

我收到以下错误

Traceback (most recent call last):
  File "parser.py", line 18, in <module>
    subprocess.call("Rscript script.r"+args.o, shell=True)
TypeError: cannot concatenate 'str' and 'file' objects

但是当我从命令行运行它时它会起作用

Rscript script.r file.txt

任何人都可以指出我犯错的地方吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

type=argparse.FileType('w'))创建一个文件对象,因此您尝试将字符串连接到文件对象,如果您希望将输出写入文件,则可以将文件对象传递给subprocess并让它写入stdout直接到文件。

subprocess.check_call(["Rscript script.r"],stdout=args.o)

`

答案 1 :(得分:0)

正如@ padraic-cunningham的回答所指出的那样,参数是一个文件对象。使用它的路径:

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

# close the file (in case we are on Windows)
args.m.close()
tbl = base.read_table(args.m.name,sep='\t')
grdevices=importr('grDevices')
grdevices.png(file="Plot.png", width=512, height=512)
r.plot(tbl[1], tbl[2], xlab= "x", ylab= "y")
grdevices.dev_off()