[R] How to repeat code snippet for several variables in a data frame?

Uwe Ligges ligges at statistik.uni-dortmund.de
Tue Aug 16 08:38:05 CEST 2005


Sander Oom wrote:

> Dear all,
> 
> I have a data frame containing the results of an experiment. Like this:
> 
> a<-seq(1,4,by=1)
> b<-seq(1,2,by=1)
> test<-expand.grid(b,a,a)
> colnames(test)<-c("replicates","bins", "groups")
> test$abc <- rnorm(32)
> test$def <- rnorm(32)
> test$ghi <- rnorm(32)
> test
> 
> The following code snippet aggregates the data for one variable and then 
> draws a plot:
> 
> tmp <- aggregate(test$abc, list(
>    test$bins, test$groups),
>    mean)
> colnames(tmp) <- c("bins", "groups", "abc")
> tmp
> #pltName <- paste("line_datGrassChem_", "abc", ".eps", sep="")
> #postscript(pltName)
>    labs <- c("-15/-9","-9/-6","-6/-3","-3/0")
>    sps <- trellis.par.get("superpose.symbol")
>    sps$pch <- 1:4
>    trellis.par.set("superpose.symbol", sps)
>    xyplot( abc ~ bins, data = tmp,
>      groups = groups, type = list("p", "l"),
>      scales = list(x = list(labels=labs)),
>      layout = c(1,1),
>      key = list(columns = 4,
>        text = list(paste(unique(tmp$groups))),
>        points = Rows(sps, 1:4)
>        )
>    )
> #dev.off()
> 
> How can I wrap R code around this code snippet, such that I can repeat 
> the same code snippet for all other variables in the data frame (i.e. 
> def, ghi, etc.).
> 
> Thanks for your suggestions!
> 
> Sander.
> 



Many ways, a very basic one is to make it a function with an argument 
corresponding to names of columns of the data.frame (code given below).

Uwe Ligges



do_it <- function(varname){
     library(lattice)
     tmp <- aggregate(test[[varname]], list(test$bins, test$groups), mean)
     colnames(tmp) <- c("bins", "groups", "abc")
     tmp
     #pltName <- paste("line_datGrassChem_", "abc", ".eps", sep="")
     #postscript(pltName)
     labs <- c("-15/-9","-9/-6","-6/-3","-3/0")
     sps <- trellis.par.get("superpose.symbol")
     sps$pch <- 1:4
     trellis.par.set("superpose.symbol", sps)
     xyplot( abc ~ bins, data = tmp,
         groups = groups, type = list("p", "l"),
         scales = list(x = list(labels=labs)),
         layout = c(1,1),
         key = list(columns = 4,
         text = list(paste(unique(tmp$groups))),
         points = Rows(sps, 1:4)
         )
     )
     #dev.off()
}

do_it("ghi")




More information about the R-help mailing list