iterated lapply
Use force() (or anything that evaluates mycondition, e.g. your print):
function(mycondition) {
force(mycondition)
function(i) mycondition * i
}
within the lapply() loop.
Not a bug, but does surprise people. It is lazy evaluation.
D.
On 2/23/15 12:57 PM, Daniel Kaschek wrote:
Hi everybody,
with the following code I generate a list of functions. Each function
reflects a "condition". When I evaluate this list of functions by
another lapply/sapply, I get an unexpected result: all values coincide.
However, when I uncomment the print(), it works as expected. Is this a
bug or a feature?
conditions <- 1:4
test <- lapply(conditions, function(mycondition){
#print(mycondition)
myfn <- function(i) mycondition*i
return(myfn)
})
sapply(test, function(myfn) myfn(2))
Cheers,
Daniel
Director, Data Sciences Initiative, UC Davis Professor, Dept. of Statistics, UC Davis http://datascience.ucdavis.edu http://www.stat.ucdavis.edu/~duncan