2013-04-15 36 views
8

Sto usando xyplot su un frame di dati e voglio alimentare una funzione del pannello con dati che non sono gli argomenti (x, y, ...), ma qualche colonna aggiuntiva dei dati telaio (diciamo k nell'esempio qui sotto):Alimentazione delle colonne del frame di dati alle funzioni del pannello xyplot

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,...) 
       }) 

sono consapevole che questo non funzionerà, perché R non alimenta questa colonna k alla funzione pannello. C'è un modo semplice per farlo?

(Non sto cercando di moltiplicare semplicemente x per k nella mia funzione del pannello vero e proprio. Sto chiamando un'altra funzione che richiede k ...)

Molte grazie!

risposta

8

Questo è l'argomento utile (ma piuttosto oscuro) di subscripts. Dalla descrizione dell'argomento "pannello" in ?xyplot:

[...] la funzione di pannello può avere 'indici' come un argomento formale. In entrambi i casi, l'argomento "subscripts" passato alla funzione del pannello sono gli indici dei dati "x" e "y" per quel pannello nei "dati" originali , PRIMA di prendere in considerazione l'effetto dello " argomento secondario.

In altre parole, un argomento formale chiamato "indici" conterrà i numeri di riga nel vostro argomento data che corrispondono ai dati che vengono tracciati nel pannello corrente - proprio quello che serve per scegliere il sottoinsieme desiderato di i valori k.

Nel tuo caso, effettuare:

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,...) 
       }) 

(Si noti che non v'è stata una complicazione strano in questa applicazione Un argomento xyplot() chiamato k otterrà interpretato come key, a causa di corrispondenza parziale di argomenti Per prevenire.. ho chiamato l'argomento rilevante K in modo che fosse passato, intatto, alla funzione del pannello.)

+0

+1! buona illustrazione degli abbonati! – agstudy

Problemi correlati