Podczas próby utworzenia listy podobnych funkcji przy użyciu lapply
, stwierdzam, że wszystkie funkcje na liście są identyczne i równe temu, jaki powinien być końcowy element.Zwracanie anonimowych funkcji lapply - co dzieje się nie tak?
Rozważmy następujący:
pow <- function(x,y) x^y
pl <- lapply(1:3,function(y) function(x) pow(x,y))
pl
[[1]]
function (x)
pow(x, y)
<environment: 0x09ccd5f8>
[[2]]
function (x)
pow(x, y)
<environment: 0x09ccd6bc>
[[3]]
function (x)
pow(x, y)
<environment: 0x09ccd780>
Podczas próby oceny tych funkcji można uzyskać takie same wyniki:
pl[[1]](2)
[1] 8
pl[[2]](2)
[1] 8
pl[[3]](2)
[1] 8
Co tu się dzieje i jak mogę uzyskać wynik pragnę (prawidłowe funkcje na liście)?
Nie jestem pewien, co jest twoim celem. Może 'pl <- funkcja (x, y) lapply (y, funkcja (y) pow (x, y)); pl (2,1: 3) '? – Roland
Te notatki autorstwa Rossa Ihaka (RCore) mogą być pomocne (szczególnie część dotycząca Lazy Evaluation) www.stat.auckland.ac.nz/~ihaka/downloads/Waikato-WRUG.pdf –
Pamiętaj, że nie jest to już prawdą R 3.2.0, zobacz moją odpowiedź poniżej. – jhin