Quando provo a creare un elenco di funzioni simili usando lapply
, trovo che tutte le funzioni nell'elenco sono identiche e uguali a ciò che dovrebbe essere l'elemento finale.Restituisce le funzioni anonime da lapply - cosa sta andando male?
Si consideri il seguente:
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>
Quando si tenta di valutare queste funzioni si ottengono risultati identici:
pl[[1]](2)
[1] 8
pl[[2]](2)
[1] 8
pl[[3]](2)
[1] 8
Che cosa sta succedendo qui, e come posso ottenere il risultato che desidero (le funzioni corrette nella lista)?
Non sono sicuro, che cosa il vostro obiettivo è. Forse 'pl <- function (x, y) lapply (y, function (y) pow (x, y)); pl (2,1: 3) '? – Roland
Queste note di Ross Ihaka (RCore) potrebbero essere utili (in particolare la parte su Lazy Evaluation) www.stat.auckland.ac.nz/~ihaka/downloads/Waikato-WRUG.pdf –
Si noti che questo non è più vero a partire da R 3.2.0, vedi la mia risposta qui sotto. – jhin