Thanks for your help. Ashwin
On Mon, Aug 12, 2013 at 10:38 AM, William Dunlap <wdun...@tibco.com> wrote: > Because dir()'s pattern argument should be a 'regular expression'**** > > and "*.xml" as a regular expression matches things you probably**** > > do not want:**** > > ** ** > > > file.create(c("one.pxml", "two.xml", "wxml.three"))**** > > [1] TRUE TRUE TRUE**** > > > dir(pattern="*.xml")**** > > [1] "one.pxml" "two.xml" "wxml.three"**** > > > dir(pattern="\\.xml$")**** > > [1] "two.xml"**** > > ** ** > > You a probably thinking of 'glob' patterns, akin to what is used**** > > in DOS and Unix shells. You can use glob2rx to convert them to**** > > regular expressions.**** > > > glob2rx("*.xml")**** > > [1] "^.*\\.xml$"**** > > ** ** > > Bill Dunlap**** > > Spotfire, TIBCO Software**** > > wdunlap tibco.com**** > > ** ** > > *From:* Ashwani Rao [mailto:ashwamegh1...@gmail.com] > *Sent:* Monday, August 12, 2013 10:04 AM > *To:* William Dunlap > *Cc:* r-help@r-project.org > *Subject:* Re: [R] function closure**** > > ** ** > > Thanks Bill.**** > > Can you please tell me why did you change exp "pattern="*.xml"" to > pattern="\\.xml$".**** > > I know that second one also makes sense.**** > > ** ** > > ** ** > > ** ** > > On Mon, Aug 12, 2013 at 9:59 AM, William Dunlap <wdun...@tibco.com> wrote: > **** > > 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]]**** > > > > **** > > ** ** > > -- > ठशà¥à¤µà¤¨à¥ पà¥à¤°à¤¤à¤¾à¤ª **** > -- ठशà¥à¤µà¤¨à¥ पà¥à¤°à¤¤à¤¾à¤ª [[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.