Change your 'fileIndex <- fileIndex + 1' to 'fileIndex <<- fileIndex + 1' so the fileIndex in the environment of the call to generateFiles() is altered (instead of creating and forgetting about a variable called fileIndex in the function created by generateFiles.
generateFiles <- function(path, pattern="\\.xml$") { files <- dir(path, pattern=pattern, full.names=TRUE, recursive=TRUE, no..=TRUE) total <- length(files) fileindex <- 1 fileGen <- function() { if (fileindex < total) { fileToReturn <- files[[fileindex]] print(fileindex) fileindex <<- fileindex + 1 fileToReturn } } fileGen } used as: > nextFile <- generateFiles("c:/temp", pattern="\\.R$") > nextFile() [1] 1 [1] "c:/temp/4209/test.R" > nextFile() [1] 2 [1] "c:/temp/a.R" Bill Dunlap Spotfire, TIBCO Software wdunlap tibco.com > -----Original Message----- > From: r-help-boun...@r-project.org [mailto:r-help-boun...@r-project.org] On > Behalf > Of Ashwani Rao > Sent: Monday, August 12, 2013 9:45 AM > To: r-help@r-project.org > Subject: [R] function closure > > Hi, > > Just for fun, I wanted to try function closures. > Here is simple function definition. > The following "generateFiles" function return function "fileGen" which will > return a a regular file in directory , every time a call it (fileGen). > > > generateFiles <- function(path, pattern="*.xml") > > { > > files <- dir(path, pattern="*.xml", full.names=TRUE, recursive=TRUE, > no..=TRUE) > > total <- length(files) > > fileindex = 1 > > fileGen <- function() > > { > > if (fileindex > total) > > { > > return(NULL) > > } > > fileToReturn <- files[[fileindex]] > > print(fileindex) > > fileindex <- fileindex + 1 > > return(fileToReturn) > > } > > return(fileGen) > > } > > > I am incrementing the value of variable "fileindex" in the function > "fileGen" , everytime I call this function. > > But the value of fileindex remains 1 , no matter how many times i call > "fileGen()". > > Can you please tell me how to change the value of fileIndex so as in > subsequent call to "fileGen" will reflect this. > -- > अश्वनी प्रताप > > [[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.