我用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
任何人都可以指出我犯错的地方吗?
谢谢。
答案 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()