将数据框列提供给xyplot面板功能

时间:2013-04-15 16:50:10

标签: r plot lattice

我在数据框上使用xyplot,并希望使用不是(x,y,...)参数的数据来提供面板函数,但是数据框的一些附加列(比如下面的示例中的k) ):

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列提供给面板功能。有一种简单的方法吗?

(我不是试图在我的实际面板函数中将x乘以k。我正在调用另一个需要k的函数...)

非常感谢!

1 个答案:

答案 0 :(得分:8)

这是有用的(但有点模糊)subscripts参数的用途。来自?xyplot中“面板”参数的描述:

  

[...]面板功能可以    将'下标'作为正式论据。在任何一种情况下,    传递给面板函数的'下标'参数是     该面板中'x'和'y'数据的索引     原始'数据',考虑到之前的影响     '子集'论证。

换句话说,名为“subscripts”的正式参数将包含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()的{​​{1}}的参数将被解释为k。为了防止这种情况,我将相关参数命名为key,以便它可以完整地传递给面板函数。)