Где я что-то пропущу?привязка функции к списку
FUN<-list()
make.FUN<-function(i) function(n) i+n
for (i in 1:3) FUN[[i]]<-make.FUN(i)
FUN[[1]](1)
Если проверить задание FUN я получаю ссылку на вложенной функции (как и ожидалось):
> FUN
[[1]]
function (n)
i + n
<environment: 0x03adfad0>
[[2]]
function (n)
i + n
<environment: 0x03ae0834>
[[3]]
function (n)
i + n
<environment: 0x03ae0604>
>
Проблема заключается в том, что если я проверяю:
> FUN[[1]](1)
[1] 4
>
, когда я ожидаю 2 ! (Очевидно, это перезапись последнего значения)
С другой стороны, если я вручную назначить для каждого элемента списка:
FUN[[1]]<-make.FUN(1)
FUN[[2]]<-make.FUN(2)
FUN[[3]]<-make.FUN(3)
я получаю правильный ответ:
> FUN[[1]](1)
[1] 2
> FUN[[2]](3)
[1] 5
>
I может обходным путем использовать do.call, но я не могу понять, что интерпретатор принимает в первом цикле, или почему do.call является обязательным в этом случае. Когда я пытаюсь:
FUN<-list()
make.FUN<-function(i) function(n) i+n
for (i in 1:3) FUN[[i]]<-do.call('make.FUN',list(i))
я получаю (как и ожидалось):
> FUN[[1]](2)
[1] 3
Любой ключ? (это происходит только при использовании списков)
большое спасибо ... проверит его ... – MSardelich