Dear Frederike, #Both your functions are vectorized. So you don't need loops. Working with vectorized functions is much faster than looping.
fn <- function (x) { ifelse(x>46 & x<52, 1, 0) } res <- fn(40:60) fn <- function (x,y) { ifelse(x>46 & x<52 & y<12, 1, 0) } datagrid <- expand.grid(i = 40:60, j = 0:20) res <- fn(datagrid$i, datagrid$j) #An other option is to use the functions for the apply-family fn <- function (x) { ifelse(x>46 & x<52, 1, 0) } res <- sapply(40:60, fn) fn <- function (x,y) { ifelse(x>46 & x<52 & y<12, 1, 0) } datagrid <- expand.grid(i = 40:60, j = 0:20) res <- apply(datagrid, 1, function(z){ fn(z["i"], z["j"]) }) #or you can use a nested loop res <-NULL for (i in 40:60){ for(j in 0:20){ res <-c(res,fn(i,j)) } } HTH, Thierry ------------------------------------------------------------------------ ---- ir. Thierry Onkelinx Instituut voor natuur- en bosonderzoek / Research Institute for Nature and Forest Cel biometrie, methodologie en kwaliteitszorg / Section biometrics, methodology and quality assurance Gaverstraat 4 9500 Geraardsbergen Belgium tel. + 32 54/436 185 [EMAIL PROTECTED] www.inbo.be To call in the statistician after the experiment is done may be no more than asking him to perform a post-mortem examination: he may be able to say what the experiment died of. ~ Sir Ronald Aylmer Fisher The plural of anecdote is not data. ~ Roger Brinner The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data. ~ John Tukey -----Oorspronkelijk bericht----- Van: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Namens Oehler, Friderike (AGPP) Verzonden: dinsdag 29 juli 2008 13:56 Aan: Oehler, Friderike (AGPP); r-help@r-project.org Onderwerp: [R] 'for' loop, two variables Dear Rusers, I am still an unexperienced builder of functions and loops, so my question is very basic: Is it possible to introduce a second variable (j) into my loop. To examplify: # This works fine: fn <- function (x) {if (x>46 & x<52) 1 else 0} res <-NULL for (i in 40:60) res <-c(res,fn(i)) res # But here, there is an error in the "for" expression: fn <- function (x,y) {if (x>46 & x<52 & y<12) 1 else 0 } res <-NULL for (i in 40:60 & j in 0:20) res <-c(res,fn(i,j)) # How do I have to write the expression "i in 40:60 & j in 0:20"? Or is there no way to do that, i.e. I have to do the calculation in two steps? Thanks in advance! Friderike [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code. ______________________________________________ R-help@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.