2013-04-15 9 views
8

Używam xyplot na ramce danych i chcę podać funkcję panelu z danymi, które nie są argumentami (x, y, ...), ale pewną dodatkową kolumną danych ramę (powiedzmy k w przykładzie poniżej)Podawanie kolumn ramki danych do funkcji panelu 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,...) 
       }) 

I zrozumieć, że to nie działa, ponieważ R nie jest podawany ten kolumny k w funkcji panelu. Czy istnieje prosty sposób na zrobienie tego?

(ja nie staram się po prostu pomnożyć x przez k w moim rzeczywistej funkcji panelu. Dzwonię inną funkcję, która wymaga k ...)

Wielkie dzięki!

Odpowiedz

8

Oto, do czego służy użyteczny (ale nieco niejasny) argument: subscripts. Z opisu "panel" argument ?xyplot:

[...] funkcja Panel może mieć 'indeksów' jako formalny argument. W obu przypadkach argument "dolny indeks" przekazany do funkcji panelu to indeksy danych "x" i "y" dla tego panelu w oryginalnych "danych" z , ZANIM biorąc pod uwagę wpływ ' podzbiór ".

Innymi słowy, formalny argument o nazwie „indeksy” będzie zawierać numery wiersz w data argument, że zgodne z danymi są wykreślane w bieżącym panelu - tylko to, co trzeba wybierać żądany podzbiór wartości-k.

W Twoim przypadku zrobić:

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

(Zauważ, że nie było jednego dziwne powikłaniem w tej aplikacji argument xyplot() nazwie k będzie się interpretować jako key, z powodu częściowego dopasowania argumentów Aby zapobiec.. podałem odpowiedni argument K, aby został on przekazany, w stanie nienaruszonym, do funkcji panelu.)

+0

+1! Dobra ilustracja indeksów dolnych! – agstudy

Powiązane problemy