Dear R-help subscribers,
Many thanks for all the answers I received either by mail or through
the list, and that were most helpful.
For the sake of the list records, I wanted to post the solution, I
eventually could obtain, to the problem I have submitted.
I am summarizing the question here. It was how to use the panel
function "panel.curve" when the expression used in this function to to
add a fitted line to the points in each panel depends not only on x,
but also on the value of the conditioning variable for the considered
panel.
This solution is based on hints given to me by Deepayan Sarkar, it
relies on the use of "packet.number" and "panel.number":
xyplot(n ~ cg | di, data = myData,
scale = list(y = "free", x = "free"),
groups = bloc,
as.table = T,
xlab = "Cg",
ylab = "N / ha",
panel = function(x, y, subscripts, groups, packet.number = di,
panel.number, ...) {
panel.grid(h = -1, v = -1, col = "grey", lwd = 1, lty = 2)
panel.curve(expr =
f.fit(unique(rev(packet.number))[panel.number], a, b, a1, b1, x),
n = 50, curve.type = "l", col =
"lightblue", ...)
panel.superpose(x, y, pch = c(1, 2), col =
c("deeppink","blue"),
panel.groups = "panel.xyplot", subscripts,
groups)
},
key = list( space = "top", transparent = TRUE, columns = 2,
points = list( pch = c(1, 2), col = c("deeppink",
"blue") ),
text = list( c("bloc 3", "bloc 4"))),
)
Some comments:
- the arguments "packet.number = di, panel.number" must appear on the
panel function prototype
- a, b, a1, b1 are parameters set to a certain value before calling
"xyplot"
- "unique" is needed to reduce to 1 the multiple instances of the
value
of the conditioning variable di for a given panel (one for each point)
- I was surprised by the need to use "rev" in order for the interval
of
the values to draw the curve f.fit to correspond to the right panel.
Any further comment would be welcome
Best regards
Jean-Marc
----
Jean-Marc Ottorini LERFoB, UMR INRA-ENGREF 1092
email ottorini at nancy.inra.fr INRA - Centre de Nancy
voice +33-0383-394046 F54280 - Champenoux
fax +33-0383-394034 France