There are two ways to do that: one is to use mapply as Thomas showed and the other is to iterate over an index rather than over the data itself. Here is a rather lame example using + but hopefully it conveys the idea of the two possibilities:
# 1 x <- y <- 1:4 mapply("+", x, y) # 2 sapply(seq(along = x), function(i) x[i]+y[i]) On 3/14/06, John McHenry <[EMAIL PROTECTED]> wrote: > Thanks, Gabor & Thomas. > > Apologies, but I used an example that obfuscated the question that I wanted > to ask. > > I really wanted to know how to have extra arguments in functions that would > allow, per the example code, for something like a counter to be incremented. > Thomas's suggestion of using mapply (reproduced below with corrections) is > probably closest. > > Jack. > > PS Here's the corrected code: > > > 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)) > windows(); plot(Y ~ X, d, type="n") > colors<- c("blue","green") > junk<- mapply( > function(z,color) with(z, lines(X, predict(lm(Y~X)), col=color)), > with(d, split(d,D)), > color=colors > ) > > > > > > Thomas Lumley <[EMAIL PROTECTED]> wrote: > > 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 > > > > Gabor Grothendieck <[EMAIL PROTECTED]> wrote: > > Try this: > > plot(Y ~ X, d, type = "n") > f <- function(i) abline(lm(Y ~ X, d, subset = D == i), col = colors[i+1]) > junk <- lapply(unique(d$D), f) > > > > > On 3/13/06, 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])) ) > > > > Thanks, > > > > Jack. > > > > > > > > --------------------------------- > > > > > > [[alternative HTML version deleted]] > > > > ______________________________________________ > > 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 > > > > > > > ________________________________ > Relax. Yahoo! Mail virus scanning helps detect nasty viruses! > > ______________________________________________ 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