2013-04-15 4 views
8

Ich benutze Xyplot auf einem Datenrahmen und möchte eine Panel-Funktion mit Daten, die nicht die (x, y, ...) Argumente, sondern einige zusätzliche Spalte der Daten Rahmen (sagen wir k im Beispiel unten):Feeding Datenrahmen Spalten zu xyplot Panel Funktionen

library(lattice) 

mydata <- data.frame(xxx = 1:20, 
        yyy = rbinom(20,20,.5), 
        uuu = gl(2,10), 
        k = rnorm(20)) 

xyplot(formula = yyy ~ xxx | uuu, data = mydata, 
     panel = function(x,y,k, ...){ 
       n <- x * k 
       panel.xyplot(n,y,...) 
       }) 

ich verstehe, dass dies nicht funktionieren wird, weil R nicht über diese k Spaltenfunktion an der Platte zuzuführen. Gibt es einen einfachen Weg dazu?

(Ich versuche, nicht nur x in meiner eigentlichen Panel-Funktion von k zu multiplizieren. Ich rufe eine andere Funktion, die k ... erfordert)

Vielen Dank!

Antwort

8

Dies ist, was das nützliche (aber etwas obskure) subscripts Argument ist. Aus der Beschreibung des "Panel" Arguments in ?xyplot:

[...] die Panel-Funktion kann haben 'Indizes' als formales Argument. In jedem Fall ist das an die Panelfunktion übergebene Argument die Indizes der 'x' und 'y' Daten für dieses Panel in den ursprünglichen 'Daten' , BEVOR der Effekt der 'berücksichtigt wird' Teilmenge 'Argument.

Mit anderen Worten, ein formales Argument namens „Indizes“ wird die Zeilennummern in Ihrem data Argumente enthält, die auf die Daten entsprechen, die in der aktuellen Platte aufgetragen - genau das, was Sie die gewünschte Teilmenge von herauszupicken müssen die k -Werte.

In Ihrem Fall tun:

xyplot(yyy ~ xxx | uuu, data = mydata, K = mydata$k, pch=16, 
     panel = function(x,y,K, ..., subscripts){ 
        n <- x * K[subscripts] 
        panel.xyplot(n,y,...) 
       }) 

(Beachten Sie, dass in dieser Anwendung eine ungeradee Komplikation war ein Argument xyplot() namens k als key aufgrund teilweise Angleichung der Argumente bekommen interpretiert zu verhindern.. das, ich nannte das relevante Argument K, so dass es intakt an die Panel-Funktion übergeben werden würde.)

+0

+1! gute Illustration von Indices! – agstudy