Следующий код не работает, как я ожидал:
a <- list(0, 1)
b <- list(0, 1)
# return a linear function with slope `a` and intercept `b`.
f <- function(a, b) function(x) a*x + b
# create a list of functions with different parameters.
fs <- mapply(f, a, b)
# test
fs[[1]](3)
# [1] 4 # expected zero!
fs[[2]](3)
# [1] 4
Может ли кто-нибудь сказать мне, почему?
NB: Я нашел обходное решение, поэтому я не ищу другого способа достижения желаемого результата. Но мне любопытно, почему этот конкретный подход не сработал.
Update:
Начиная с R 3.2.0, теперь это работает так, как ожидалось:
a <- list(0, 1)
b <- list(0, 1)
f <- function(a, b) function(x) a*x + b
fs <- mapply(f, a, b)
# test
fs[[1]](3)
# [1] 0
fs[[2]](3)
# [1] 4