[R] Incrementing a counter in lapply
Thomas Lumley
tlumley at u.washington.edu
Mon Mar 13 19:50:10 CET 2006
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
More information about the R-help
mailing list