From: Deepayan Sarkar <deepayan_at_stat.wisc.edu>

Date: Tue 27 Jul 2004 - 09:50:13 EST

R-help@stat.math.ethz.ch mailing list

https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Jul 27 09:57:12 2004

Date: Tue 27 Jul 2004 - 09:50:13 EST

On Monday 26 July 2004 18:17, Dirk Eddelbuettel wrote:

> I've been scrathing my head over this one. Suppose I have a

*> data.frame which maps to a 'n x k' lattice, and that one of those
**> cells is empty.
**>
**> An artificial example is generated by
**>
**> Q<-data.frame(x1=sample(c("A","B"),10,replace=TRUE),
**> x2=c("C", rep("D",9)), y=rnorm(10))
**>
**> where by having only one obs. for the first level of the second
**> factor x2, we ensure that there won't be full combinations of x1 and
**> x2.
*

The empty cell is not the issue, rather it's the fact that the panel that gets the first observation (x2 = "C") has only that one single observation. So for that panel, sd(x, na.rm = TRUE) = NA, hence

dnorm(<mesh points>, mean = <whatever>, sd = NA)

eventually produces a bunch of NA's, which grid.lines tries to draw. grid.lines has known issues with NA's, and I would guess that's what causes the broken pdf.

The good news is that there doesn't seem to be any problems in r-devel (possibly because grid handles NA's better now).

The natural workaround for your code would be to skip the panel.mathdensity call unless length(x) > 1.

Deepayan

> This seems to trip panel.mathdensity(), but only when printing to

*> pdf, and I can't find a way to avoid it. Consider
**>
**>
**> stopifnot(require(lattice))
**> stopifnot(require(grid))
**>
**> pdf("testfile.pdf")
**> Q<-data.frame(x1=sample(c("A","B"),10,replace=TRUE),
**> x2=c("C", rep("D",9)), y=rnorm(10))
**> print(histogram(~ y | x1+x2, data=Q,
**> panel = function(x, ...) {
**> if (length(x) > 0) {
**> panel.histogram(x, ...)
**> panel.mathdensity(dmath = dnorm, col = "black",
**> args = list(mean=mean(x,
**> na.rm=TRUE), sd=sd(x, na.rm=TRUE))) }
**> }))
**> dev.off()
**>
**>
**> where the resulting pdf file is broken if and only if the
**> panel.mathdensity call is present. Without it, it works. To the
**> screen, it works with and without -- but copying to pdf again breaks
**> the pdf file if
**> panel.mathdensity is used.
**>
**> It is possible that I am overlooking something simple -- or is it a
**> genuine bug?
**>
**> Platform is win2k, R version is 1.9.1.
**>
**> Thanks for any pointers, Dirk
*

R-help@stat.math.ethz.ch mailing list

https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Tue Jul 27 09:57:12 2004

*
This archive was generated by hypermail 2.1.8
: Fri 18 Mar 2005 - 02:39:20 EST
*