[R] Using variable names in for loops - Generating plots semi-automatically from a series of variables Partly solved

Mark Lyman mark.lyman at gmail.com
Fri Feb 9 18:46:39 CET 2007


Anthony Staines <anthony.staines <at> gmail.com> writes:

For each
> disease, I want to pull out the column of data containing the word
> 'Male' and plot this against age, and then add a line to the plot for
> the corresponding column containing 'Female'.
> --
> attach(data)
> 
> Diseases <- c("Cardiovascular disease","Road Traffic Injury",  ...
> ,"All causes")
> Male <- names(data)[grep("Male",names(data))]
> Female <- names(data)[grep("Female",names(data))]
> #Disease contains disease labels in the correct order, and Male and
> Female now hold the (correct) variables.
> 
> for (i in seq(1,length(Diseases)))
>   {
> jpeg(paste(Diseases[i],".jpg")) #This works fine!
> plot(Male[i]~Age)                  #This does not
> lines(Female[i]~Age)
> dev.off()
> }
> detach(data)

[SNIP]

There are a few ways you can do this. Using plot.formula like you do here you 
can use this:

> mydata <- as.data.frame(matrix(runif(300),30,10))
> attach(mydata)
> plot(formula(paste(mynames[1],mynames[2],sep='~')))

A way to do this without a formula would be:
> plot(eval(parse(text=mynames[1])),eval(parse(text=mynames[2])))
> detach(mydata)

Take a look at the help files for eval and parse. I still do not have a firm 
grasp on how to use them and other related functions, like substitute, but 
what I have been able figure out has been very useful.

Mark Lyman



More information about the R-help mailing list