8

我在数据框上使用 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 的函数......)

非常感谢!

4

1 回答 1

8

这就是有用(但有些晦涩)的subscripts论点的用途。从“面板”参数的描述中?xyplot

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

换句话说,一个名为“subscripts”的正式参数将包含data参数中的行号,这些行号对应于当前面板中绘制的数据——正是您需要挑选出所需的k-values 子集的内容。

在您的情况下,请执行以下操作:

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()named的参数k将被解释为key。为了防止这种情况,我命名了相关参数K,以便将其完整地传递给面板函数.)

于 2013-04-15T17:57:05.993 回答