2010-02-03 5 views
3

J'ai précédemment demandé ce question qui était utile pour tracer une fonction. Je veux essayer de tracer vingt fonctions sur les mêmes axes pour illustrer comment une fonction varie entre deux gammes. Je l'ai fait avec succès en utilisant des fonctions spécifiées individuellement, mais je voulais le faire en utilisant une boucle.Tracer plusieurs fonctions dans R

Ce que j'ai essayé fais, c'est:

## add ggplot2 
library(ggplot2) 
library(lattice) 

# Declare local variables 
inPath = "D:/R_Analysis/" 
inFile = "sample.txt" 

outPath = "D:/R_Analysis/" 
outFile = "processed_sample.txt" 

pdfOutPath = "D:/R_Analysis/" 
pdfOutFile = "processed_sample.pdf" 

# Declare Chart values 
y_label = "x-axis" 
x_label = "y-axis" 
chart_title = "..." 

##################################################################### 
## Read in data; 
analysis <- 
read.table(paste(inPath, inFile, sep=""), header=TRUE, sep=",", 
na.strings="NA", dec=".", strip.white=TRUE) 

# Setup pdf 
pdf(paste(pdfOutPath, pdfOutFile, sep=""),height=6,width=9) 

# make plot object  
p <- qplot(
data = data.frame(x = x, y = y), x, y, xlab = x_label, ylab = y_label, 
enter code herexlim = x_range, main = chart_title ) 

# make empty function 
eq_dummy = function(x){ 0 } 
d = stat_function(fun = eq_dummy) 

############## 
# LOOP ####### 

for(i in 1 : 21){            

     # Specify Variables 
     intercept = analysis[i,2] 
     slope = analysis[i,3]  

     # Define Curve  
     eq <- function(x) { slope * log(x) + intercept } 

     # Make plot object    
     composite <- stat_function(fun=eq)   
     composite = composite + d  

} 

print(p + composite) 

# Show warnings 
warnings() 

# close the PDF file 
dev.off() 

Toutes les suggestions sur l'amélioration de la syntaxe ou la structure de programmation seraient appréciés. Je vous remercie.

Répondre

3

Il ya une belle fonction file.path qui permet de créer des chemins de fichiers indépendants du système d'exploitation. Vous pouvez l'utiliser dans votre code comme:

inPath = file.path("D:","R_Analysis") 
inFile = "sample.txt" 
outPath = file.path("D:","R_Analysis") 
outFile = "processed_sample.txt" 
pdfOutPath = file.path("D:","R_Analysis") 
pdfOutFile = "processed_sample.pdf" 

puis utilisez

read.table(file.path(inPath, inFile)) 
pdf(file.path(pdfOutPath, pdfOutFile)) 

Votre chemin est « fenêtres dépendait » (référence à l'étiquette du disque), mais si vous utilisez des chemins de parents alors il pourrait être plus utile.

Et deuxième indice - vous devez ouvrir le périphérique graphique le plus tard possible, par ex. Ensuite, il est plus facile de rechercher la ligne correcte lorsque vous voulez voir le tracé dans la fenêtre et non dans le fichier.

1

Soyez conforme à votre style. Par exemple, utilisez toujours <- ou utilisez toujours =; ne pas mélanger et assortir. Voici quelques exemples de guides de style de Google et Hadley Wickham.

Si vous utilisez read.table avec sep=',' et header=TRUE, vous pouvez probablement appeler read.csv à la place.

Dans la mesure du possible, essayez de placer les éléments dans les fonctions plutôt que d'avoir un long script. Cela peut aider à rendre le code plus lisible, et en prime vous pouvez vous retrouver avec des morceaux de code que vous pouvez réutiliser pour des analyses ultérieures. Dans ce cas, je serais tenté de déplacer tout le code qui crée le tracé dans une fonction (éventuellement avec des sous-fonctions pour initialiser le tracé et pour faire la partie de dessin). Le R Inferno contient beaucoup d'idées sur la bonne pratique de programmation en R.

Questions connexes