我在一个数据框上使用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,...)
})
Run Code Online (Sandbox Code Playgroud)
我知道这不起作用,因为R不会将此k列提供给面板功能.有一个简单的方法吗?
(我不是试图在我的实际面板函数中将x乘以k.我正在调用另一个需要k的函数...)
非常感谢!
这就是有用(但有点模糊)的subscripts论点.从"面板"参数的描述?xyplot:
[...]面板功能可以将'下标'作为正式参数.在任何一种情况下,传递给面板函数的'subscripts'参数是原始'数据'中该面板的'x'和'y'数据的索引,在考虑'subset'参数的影响之前.
换句话说,名为"subscripts"的正式参数将包含data参数中的行号,这些行号对应于当前面板中绘制的数据 - 正是您需要选择所需的k-value 子集.
在你的情况下,做:
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,...)
})
Run Code Online (Sandbox Code Playgroud)
(注意,在这个应用程序中有一个奇怪的复杂.由于参数的部分匹配,xyplot()named的一个参数k将被解释为key.为了防止这种情况,我命名了相关的参数,K以便它可以完整地传递给面板函数.)