2016-09-12 76 views
0

我已經設置了Rscript來從命令行解析選項。它解析文件名很好,但是當我嘗試通過命令解析指定要在x或y軸上繪圖的內容時,它無法識別我想要繪製的字段。這裏是RSCRIPTRscript optparse ggplot

#!/usr/bin/Rscript --vanilla 
library(ggplot2) 
library("optparse") 

option_list = list(
    make_option(c("-f", "--file"), type="character", default=NULL, 
       help="dataset file name", metavar="character"), 
    make_option(c("-o", "--out"), type="character", default="out.txt", 
       help="output file name [default= %default]", metavar="character"), 
    make_option(c("-x", "--x_axis"), type="character", default="name", 
       help="x axis value [default= %default]", metavar="character"), 
    make_option(c("-y", "--y_axis"), type="character", default="score", 
       help="y axis value [default= %default]", metavar="character") 
); 

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

data <- read.table(opt$file, header=TRUE) 
p <- ggplot(data, aes(x=factor(opt$x_axis), opt$y_axis)) 

p + geom_boxplot() 

這裏是數據文件:

character name score 
A 54  3.589543 
B 54  3.741945 
C 60  3.585833 
D 60  3.655622 

這裏是命令行:

./boxplot.R -f 「file.txt的」 -o「測試.png「-x」名稱「-y」得分「

回答

0

這不是optparse的問題,而是延遲對ggplot2的評價。

這裏是一個解決方法:使用「引用的字符串」你從optparse到 子集數據到一個新的(臨時)data.frame,然後從該地塊。即使用這三條線:

data <- read.table(opt$file, header=TRUE) 
newdata <- data.frame(x=as.factor(dataset[, opt$x_axis]), 
         y=dataset[,opt$y_axis]) 
p <- ggplot(newdata, aes(x=x, y=y)) 

隨着我得到的情節,如下圖所示。哦,我覺得docoptoptparse好多了。

enter image description here

+0

這是正確的解決方案!謝謝! –

+0

很高興聽到。 StackOverflow的工作方式是通過點擊標記(只有你作爲原始的海報才能看到),預計你會「接受」一個正常的工作答案(或者最好的答案)。此外,您也可以通過點擊向上箭頭來「upvote」。該系統基於優點,以便更好的答案獲得獎勵。 –