Stavo passando attraverso some examples nella guida di hadley ai funzionali, e ho trovato un problema inaspettato.
Supponiamo che io sono un elenco di oggetti del modello,
x=1:3;y=3:1; bah <- list(lm(x~y),lm(y~x))
e desidera estrarre qualcosa da ciascuno (come suggerito in questione di Hadley su una lista denominata "prove"). Mi aspettavo che uno di questi funzionasse:
lapply(bah,`$`,i='call') # or...
lapply(bah,`$`,call)
Tuttavia, restituiscono valori nulli. Sembra che io non sto abusando della funzione $
, come queste cose funzionano:
`$`(bah[[1]],i='call')
`$`(bah[[1]],call)
Comunque, sto solo facendo questo come un esercizio e sono curioso dove il mio errore è. So che potrei usare una funzione anonima, ma penso che ci debba essere un modo per usare la sintassi simile alla mia non-soluzione iniziale. Ho guardato attraverso i posti $
è menzionato in ?Extract
, ma non ho visto alcuna spiegazione ovvia.
Ho appena realizzato che questo funziona:
lapply(bah,`[[`,i='call')
e questo
lapply(bah,function(x)`$`(x,call))
Forse questo solo si riduce a qualche lapply
voodoo che richiede funzioni anonime in cui dovrebbe essere necessario nessuno? Mi sembra di averlo sentito da qualche parte su SO prima.
Nessun voodoo. La funzione "$" non valuta i suoi argomenti, mentre "[[" fa. –
@DWin - puoi esporre per favore, non capisco cosa intendi con quello – eddi
@Dwin Forse questo è proprio sopra la mia testa, ma non sono chiaro su cosa significhi qui la valutazione. Sembra valutare args bene quando chiamato direttamente, come in '\' $ \ '(bah [[1]], i = 'call')' ...? (argh: sfuggire ai backtick in linea è fastidioso) – Frank