2013-04-15 2 views
8

Я использую xyplot в кадре данных и хочу передать функцию панели с данными, которые не являются аргументами (x, y, ...), но некоторые дополнительные столбцы данных рама (скажем к в приведенном ниже примере):Подача столбцов кадра данных на функции панели 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,...) 
       }) 

Я понимаю, что это не будет работать, так как R не подает эту колонку K к функции панели. Есть ли простой способ сделать это?

(я не пытаюсь просто умножить й на к в моей фактической функции панели. Я звоню другую функцию, которая требует, к ...)

Большого спасибо!

ответ

8

Это - полезный (но несколько неясный) аргумент subscripts. Из описания «панели» аргумент в ?xyplot:

[...] функция панели может иметь «индексы» в качестве формального аргумента. В любом случае аргумент «индексы» «переданные» функции панели представляют собой индексы данных «x» и «y» для этой панели в исходных «данных» , прежде чем принимать во внимание влияние ' подмножество ".

Других слов, формальный аргумент с именем «подстрочные» будет содержать номера строк в вашем data аргументе, которые соответствуют данным затевается в текущей панели - именно то, что вам нужно, чтобы выбрать нужное подмножество k -значения.

В вашем случае, сделайте следующее:

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

(Обратите внимание, что существует один нечетное осложнение в этом приложении аргумент для xyplot() имени k получат истолковано как key, из-за частичное совпадение аргументов, чтобы предотвратить.. что я назвал соответствующий аргумент K так, чтобы он был передан, неповрежденным, на функцию панели.)

+0

+1! хорошая иллюстрация индексов! – agstudy

Смежные вопросы