2016-09-12 1 views
0

J'ai configuré un Rscript pour analyser les options de la ligne de commande. Il analyse correctement le nom du fichier, mais quand j'essaie de spécifier ce qu'il faut tracer sur l'axe x ou y par l'analyse des commandes, il ne reconnaît pas le champ que j'essaie de tracer. Voici le 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() 

Voici le fichier de données:

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

Voici la ligne de commande:

./boxplot.R -f "fichier.txt" -o « test .png "-x" nom "-y" score "

Répondre

0

Ce n'est pas votre problème avec optparse, c'est plutôt une évaluation retardée qui vous mord de ggplot2.

Voici une solution: utiliser les « chaînes entre guillemets » que vous obtenez de optparse à sous-ensemble de vos données dans un nouveau (temporaire) data.frame puis parcelle de cela. C'est à dire. utiliser ces trois lignes:

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

Avec cela j'obtiens le tracé comme désiré et montré ci-dessous. Oh, et pour ce que ça vaut, je pense que docopt est beaucoup plus agréable que optparse.

enter image description here

+0

Ceci est la bonne solution! Je vous remercie! –

+0

Content de l'entendre. La façon dont StackOverflow fonctionne est que vous devez «accepter» une réponse de travail (ou mieux parmi plusieurs) en cliquant sur la coche (que vous seul voyez comme affiche originale). De plus, vous pouvez également «upvoter» en cliquant sur la flèche vers le haut. Le système est basé sur le mérite afin que de meilleures réponses soient récompensées. –