Ich ging durch some examples in hadley's Anleitung zu Funktionalen und stieß auf ein unerwartetes Problem.
Angenommen, ich habe eine Liste von Modellobjekten,
x=1:3;y=3:1; bah <- list(lm(x~y),lm(y~x))
und will etwas von jedem extrahieren (wie in Hadley Frage nach einer Liste namens „Studien“ vorgeschlagen). Ich habe erwartet, dass einer von diesen funktioniert:
Allerdings diese Rückkehr Nullen. Es scheint, als ob ich nicht die $
Funktion mißbrauchen, wie diese Dinge funktionieren:
`$`(bah[[1]],i='call')
`$`(bah[[1]],call)
Wie auch immer, ich mache das nur als Übung und sind gespannt, wo mein Fehler ist. Ich weiß, dass ich eine anonyme Funktion verwenden könnte, denke aber, dass es eine Möglichkeit geben muss, eine Syntax zu verwenden, die meiner anfänglichen Nicht-Lösung ähnlich ist. Ich habe die Plätze $
durchgesehen, die in ?Extract
erwähnt wird, aber keine offensichtliche Erklärung sah.
Ich habe erkannt, dass dies funktioniert:
lapply(bah,`[[`,i='call')
und diese
lapply(bah,function(x)`$`(x,call))
Vielleicht nur dies kommt unten einige lapply
Voodoo, die anonyme Funktionen verlangt, wo keine nötig werden sollte? Ich habe das Gefühl, dass ich das schon mal irgendwo auf SO gehört habe.
Kein Voodoo. Die "$" - Funktion wertet ihre Argumente nicht aus, während "[[". –
@DWin - können Sie bitte erklären, ich verstehe nicht, was Sie damit meinen – eddi
@Dwin Vielleicht ist das nur über meinen Kopf, aber ich bin nicht klar, was Bewertung bedeutet hier. Es scheint Args in Ordnung zu sein, wenn es direkt aufgerufen wird, wie in '\ $ {' (bah [[1]], i = 'call') '...? (argh: Inline-Backticks zu umgehen ist ärgerlich) – Frank