[R] xyplot: getting data into the panel function

Sundar Dorai-Raj sundar.dorai-raj at pdf.com
Tue Apr 4 15:10:45 CEST 2006



Sundar Dorai-Raj wrote:
> 
> Søren Højsgaard wrote:
> 
>>In xyplot, I would like to get the "data into the panel function" in the following sense: Consider
>>
>>xyplot(scc~time|cowidp, data=cow.s,type=c("l"),
>>  panel=function(x,y,subscripts,...){
>>    panel.xyplot(x,y,...)
>>    vvv<-cow.s[which(!is.na(cow.s[subscripts,"mastreat"])),"time"]
>>    panel.abline(v=vvv,col="red",lwd=2)
>>  }
>>)
>> 
>>If I want to use a different dataset, say cow.2, I would have to modify the code twice in the panel function. Is there a way of avoiding this?
>> 
>>Best regards
>>Søren
>>
>>	[[alternative HTML version deleted]]
>>
>>
> 
> 
> Hi, Søren,
> 
> I usually do this by creating a wrapper function:
> 
> plot.cow <- function(formula = ssc ~ time | cowidp, data, ...) {
>    xyplot(formula, data = data, type = "l",
>           panel = function(x, y, subscripts, time, mastreat, ...) {
>             panel.xyplot(x, y, ...)
>             vvv <- time[which(!is.na(mastreat[subscripts])]
>             panel.abline(v = vvv, col = "red", lwd = 2)
>           },
>           time = data$time,
>           mastreat = data$mastreat)
> }
> 
> plot.cow(cow.s)
> plot.cow(cow.2)
> 
> HTH,
> 
> --sundar
> 

Sorry. That should be:

plot.cow <- function(data, ...) {
   xyplot(ssc ~ time | cowidp, data, type = "l",
          panel = function(x, y, subscripts, time, mastreat, ...) {
            panel.xyplot(x, y, ...)
            vvv <- time[which(!is.na(mastreat[subscripts])]
            panel.abline(v = vvv, col = "red", lwd = 2)
          },
          time = data$time,
          mastreat = data$mastreat,
          ...)
}

plot.cow(cow.s)
plot.cow(cow.2)

I removed the "formula" argument assuming that you'll never change it. 
Add it back to the argument list if that's not the case.

HTH,

--sundar




More information about the R-help mailing list