将数据框列传递给xyplot面板函数

9

我正在使用xyplot来处理数据框,并希望将某些额外的数据列(例如下面示例中的k)提供给面板函数,而不是作为(x,y,...)参数:

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个回答

9
这就是有用但有些晦涩的“subscripts”参数的作用。从?xyplot中“panel”参数的描述中可以看到:

[...] panel函数可以有“subscripts”作为一个形式参数。在任何一种情况下,传递给panel函数的“subscripts”参数都是在原始“数据”中x和y数据在该面板中的索引,在考虑“subset”参数的影响之前。

换句话说,一个名为“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() 的一个参数命名为 k 将被解释为 key,这是由于部分匹配参数造成的。 为了防止发生这种情况,我将相关参数命名为 K,以便将其完整地传递给面板函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接