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

From: Uwe Ligges <ligges_at_statistik.uni-dortmund.de>
Date: Tue 16 Aug 2005 - 16:38:05 EST

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



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Aug 16 16:46:22 2005

This archive was generated by hypermail 2.1.8 : Sun 23 Oct 2005 - 15:22:06 EST