On Mon, 13 Mar 2006, John McHenry wrote: > Hi All, > > I'm looking for some hints on idiomatic R usage using 'lapply' or similar. > What follows is a simple example from which to generalize my question... > > # Suppose, in this simple example, I want to plot a number of different > lines in different colors; > # I define the colors I wish to use and I plot them in a loop: > d<- data.frame(read.table(textConnection(" > Y X D > 85 30 0 > 95 40 1 > 90 40 1 > 75 20 0 > 100 60 1 > 90 40 0 > 90 50 0 > 90 30 1 > 100 60 1 > 85 30 1" > ), header=TRUE)) > # graph the relation of Y to X when > # i) D==0 > # ii) D==1 > with( d, plot(X, Y, type="n") ) > component<- with( d, split(d, D) ) > colors<- c("blue", "green") > for (i in 1:length(component)) > with( component[[i]], lines(X, predict(lm(Y ~ X)), col=colors[i]) ) > > # > # ... seems easy enough > # > # [Q.]: How to do the same as the above but using 'lapply'? > # ... i.e. something along the lines of: > with( d, plot(X, Y, type="n") ) > colors<- c("blue", "green") > # how do I get lapply to increment i? > lapply( with(d, split(d, D)), function(z) with(z, lines(X, predict(lm(Y ~ > X)), col=colors[i])) ) >
You can't get lapply to increment i, but you can use mapply and write your function with two arguments. mapply( function(z,colour) with(z, lines(X, predict(lm(Y~X), col=colour)), with(d, split(d,D)), colors) -thomas ______________________________________________ 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