'v' was not evaluated when you defined the function; this is 'lazy'
evaluation in R; try

get_data_function <- function(v) {
v   # cause 'v' to be evaluated
function() {
   print(v)  # now it is defined when the function is
}
}
data_functions <- sapply(1:10,function(v) get_data_function(v))
(data_functions[[1]])()


On 4/4/07, Matthew Suderman <matthewsuderman@yahoo.com> 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?
> * Is there a more direct way to get the effect of printing v?
>
> Matt
>
>
>
> ---------------------------------
> Don't get soaked.  Take a quick peek at the forecast
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem you are trying to solve?

	[[alternative HTML version deleted]]

