2016-11-25 2 views
1

der Code, den ich in meinem Buch zu sehen:Wie funktioniert das Panel-Argument in R? Dieser

print(xyplot(lower + upper ~ x, data=NPL.bands(dataset$variable), 
    panel = function(x,y,...) { 
     panel.xyplot(x,y,...) 
     panel.curve(pnorm(x,7.22,1.14), lwd=1.5) 
    })) 

So beginne ich dies wie folgt zu lesen: Plot sowohl die oberen und unteren Enden des Konfidenzband für diesen Datensatz.

Aber danach bin ich verwirrt. Ich weiß, dass die Panel-Funktion spezialisiertere Änderungen an dem Panel vornehmen kann.

Es scheint, dass der Code sagt "Wir setzen eine XY-Funktion in diesem Panel, und wird durch die XYPLOT-Funktion aufgerufen werden, und es wird eine Kurve mit den folgenden Argumenten sein".

Bin ich richtig in der Annahme, dass, sobald Sie ein Panel-Argument aufrufen, Sie panel.X tun können, wo 'X' ist eine Funktion, die relevant ist, was das Panel-Argument anfänglich aufgerufen? (in diesem Fall die Funktion "function (x, y, ...)")

Bonus Frage: Wie weiß R, was in ein "..." Argument zu packen?

Antwort

1

Ich würde sagen, Sie waren im Grunde richtig. Der Panel-Parameter ist in diesem Fall eine Funktion, die zwei benannte Argumente akzeptiert, nämlich x und y, und eventuell weitere benannte Argumente in der Punkte-Liste zu akzeptieren (aber nur wenn ihre Namen genau mit denen der jeweiligen Panel-Funktionen übereinstimmen. Sie können nachschauen, was benannte Parameter können Werte zugewiesen bekommen, indem für panel.xyplot und panel.curve auf die Hilfe-Seiten gehen.

auch in diesem Fall haben Sie zwei Namen auf der LHS des Tilde in der Formel, so dass jede Instanz von y im panel.xyplot Funktionen erhalten Vektoren einmal, einmal mit y als lower und einmal als upper. Die panel.curve Aufruf erhält diese zusätzlichen Werte nicht, weil ich dort s nein y in seiner Parameterliste.

ich diese NPL.band Funktion gehe davon aus Paket SMIR und dass Ihre Daten Argument sieht ungefähr so ​​aus:

str(NPL.bands(y)) 
# 
List of 3 
$ x : num [1:44] 0 3 4 5 6 7 8 9 10 11 ... 
$ lower: num [1:44] 0.000362 0.004418 0.011527 0.030885 0.054412 ... 
$ upper: num [1:44] 0.0996 0.1327 0.1627 0.2176 0.2683 ... 

bei der Suche panel.xyplot wir sehen:

panel.xyplot(x, y, type = "p", 
      groups = NULL, 
      pch, col, col.line, col.symbol, 
      font, fontfamily, fontface, 
      lty, cex, fill, lwd, 
      horizontal = FALSE, ..., 
      grid = FALSE, abline = NULL, 
      jitter.x = FALSE, jitter.y = FALSE, 
      factor = 0.5, amount = NULL, 
      identifier = "xyplot") 

So Sie könnten einen dieser Parameter hinzufügen, entweder benannt oder positionsangepasst für "type" bis "horizontal", aber nur als benannt für die späteren nach dem "...", und sie würden innerhalb des Funktionsaufrufs panel.xyplot gefunden werden. Versuchen Sie, col=c("darkred", "orange"), direkt nach dem Komma des Datenarguments hinzuzufügen.

Nehmen Sie sich auch die Zeit, um die ?Lattice Seite zu überprüfen.

+0

Vielen Dank - das war sehr hilfreich. – Antecedent