On Wed, 4 Apr 2007, Matthew Suderman wrote: > I wanted to create a list of functions whose output differs depending > the value of a variable when the function was created. Generally this > did not work. Each function was exactly the same, as in the simple > example below: > > get_data_function <- function(v) { > function() { > print(v) > } > } > data_functions <- sapply(1:10,function(v) get_data_function(v)) > (data_functions[[1]])() # prints 10! > > However, if I insert a statement in get_data_function to print argument > v, then I get the different functions that I wanted: > > get_data_function <- function(v) { > print(v) > function() { > print(v) > } > } > data_functions <- sapply(1:10,function(v) get_data_function(v)) > (data_functions[[1]])() # prints 1, as expected! > > I have two questions about this: > * Is this a bug in R?
No, it's lazy evaluation at work. > * Is there a more direct way to get the effect of printing v? The function force() is designed for this -- it doesn't do anything special that any other evaluation wouldn't do, but it makes clear that all you are doing is forcing evaluation. -thomas ______________________________________________ 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 and provide commented, minimal, self-contained, reproducible code.