[R] indexing within panels in xyplot

Sebastian Luque spluque at gmail.com
Tue Feb 21 17:48:05 CET 2006


"Deepayan Sarkar" <deepayan.sarkar at gmail.com> wrote:

[...]

> Well, there are exceptions to this rule, but generally x and y, when
> they are passed on to the panel function, are _already_ subsetted, so
> x[subscripts] makes absolutely no sense. Note how your panel function
> calls

> panel.xyplot(x, y, ...)

> without referring to subscripts at all. The subscripts argument is
> there for other variables (e.g. if you were drawing confidence
> intervals, and had a separate vector in your data specifying the
> interval lengths). In your case, there are no other variables
> involved, so just get rid of the subscripts.

Thanks Deepayan, I was indeed quite confused about this.

I realized I needed to limit the fitted line to the range of x values the
line is fit to, so I changed to panel.curve:

---<---------------cut here---------------start-------------->---
xyplot(y ~ x | facA, groups = facB, data = toydf,
       panel.groups = function(x, y, ...) {
         panel.xyplot(x, y, ...)
         lindx <- which(y == max(y, na.rm = TRUE))
         xleft <- mean(x[lindx], na.rm = TRUE)
         fit <- lm(y[x >= xleft] ~ x[x >= xleft])
         panel.curve(coef(fit)[1] + (coef(fit)[2] * x),
                     xleft, max(x, na.rm = TRUE))
       })

---<---------------cut here---------------end---------------->---

but can't find a way to color the line for each group differently.  I
tried passing a length-2 vector as a 'col' argument to panel.curve.
Unfortunately it's only picking the first, so that both lines get colored
the same.  I'm not sure, but it seems as if I need to use
'panel.superpose' directly to do this, as the help page suggests the above
would work?

Cheers,

-- 
Sebastian P. Luque




More information about the R-help mailing list