2016-09-12 3 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" name "-y" score "

ответ

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)) 

С этим я получу участок по желанию и показан ниже. О, и для чего это стоит, думаю, docopt много приятнее, чем optparse.

enter image description here

+0

Это правильное решение! Спасибо! –

+0

Рад слышать. Способ работы StackOverflow заключается в том, что вы ожидаете «принять» рабочий ответ (или лучший из нескольких), нажав на отметку (которую вы видите только в качестве исходного плаката). Кроме того, вы также можете «увеличить», нажав стрелку вверх. Система основана на заслугах, поэтому лучшие ответы получают награды. –