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]]
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-bounces at r-project.org [mailto:r-help-bounces at
r-project.org] On Behalf
> Of Ashwani Rao
> Sent: Monday, August 12, 2013 9:45 AM
> To: r-help at 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]]
Try changing the assignment to use "<<-"
fileindex <<- fileindex + 1
On Mon, Aug 12, 2013 at 12:44 PM, Ashwani Rao
<ashwamegh1935@gmail.com>wrote:
> 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.
>
>
--
Jim Holtman
Data Munger Guru
What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.
[[alternative HTML version deleted]]