2016-03-14 67 views
0

我有一个R脚本,它根据输入数据计算一个图。R optparse:使用相同前缀的输入和输出文件

输入数据和输出文件应该有相同的文件名,只有文件扩展名应该不同。

例如,R脚本应该使用文件data.csv并生成图data.png

然而,这并不工作:

library(optparse) 

option_list = list(
    make_option(c("-i", "--in_file"), type="character", default=NULL, 
       help="input file", metavar="filename"), 
    make_option(c("-o", "--out_file"), type="character", 
       default=paste(opt$infile, ".png", sep=""), 
       help="output file [default= %default]", metavar="filename") 
) 

opt_parser = OptionParser(option_list=option_list) 
opt = parse_args(opt_parser) 

这给错误消息,因为opt无法找到(既不data.png也不data.csv.png创建)。

Error in paste(opt$infile, ".png", sep = "") : object 'opt' not found 

任何想法如何解决这个问题?

编辑:忘了复制两行代码,现在代码已完成。

据我所知,opt无法找到,因为它是后来定义的。但是,我的问题仍然存在:如果没有给出其他值,我怎样才能确保输出文件具有相同的文件名(除了扩展名)作为输入文件?

+0

你在哪里定义了'opt'? –

+0

谢谢,'opt'是问题所在,因为它是在我尝试访问它之后定义的。然而,我的问题仍然存在,请参阅编辑问题。 – maxie

+1

可能会将默认值设置为NULL,并在以后的代码中使用'if(is.null(opt $ out_file))opt $ out_file < - gsub(“\\。csv $”,“.png”,opt $ in_file) ' – baptiste

回答

0

也许是默认值设置为NULL,并在后面的代码使用 如果(is.null(选择$ out_file))选择$ out_file < - GSUB( “\ CSV $”, “png格式”, opt $ in_file)

@baptiste:谢谢你的解决方案。

make_option(c("-o", "--out_file"), type="character", 
      default=NULL, ...) 
... 
opt$out_file <- gsub("\\.csv$", ".png", opt$in_file) 
0

不确定它是相关的,但在你的调用中粘贴时应该用“sep”代替“set”。

相关问题