Re: [R] lattice / pdf bug ?

2004-07-27 Thread Dirk Eddelbuettel
On Mon, Jul 26, 2004 at 06:50:13PM -0500, Deepayan Sarkar wrote:
> 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(, mean = , 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.

Confirmed -- that does the trick for 'plain' R 1.9.1 as well. Thanks a lot
for this, I had obviously focussed on the wrong aspect (the 'empty' cell
rather than the one with just one element).

Dirk
 
> 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
> 

-- 
Those are my principles, and if you don't like them... well, I have others.
-- Groucho Marx

__
[EMAIL PROTECTED] 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


Re: [R] lattice / pdf bug ?

2004-07-26 Thread Deepayan Sarkar
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(, mean = , 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

__
[EMAIL PROTECTED] 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


[R] lattice / pdf bug ?

2004-07-26 Thread Dirk Eddelbuettel

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.

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

-- 
Those are my principles, and if you don't like them... well, I have others.
-- Groucho Marx

__
[EMAIL PROTECTED] 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