[R] Lattice levelplots and (partial) failure on some devices ----Long

Joel Kincaid jfkincaidsu at netscape.net
Fri Jun 13 04:24:00 CEST 2003



Dear Community,

(win XP home, sp1; R1.7 -- patched version, binary download, version of 
lattice obtained with patched version; the following applies to 1.6.2 as 
well.)

The following message was originally composed to seek help. However I 
have 'hacked' a solution to the following behavior, but none the less 
someone might find this interesting.

To reproduce my 'problem' you can use the following code:

library(lattice)
hypodata <- expand.grid(ProdMult = seq(0,1,by=.1),
                         WfMult = seq(0,1,by=.1),
                         Tr=c(0,75))
hypodata$UnCC <- 4.6 + (hypodata$ProdM^2) * (hypodata$Wf^3 )
hypodata$UnCC[1:121]   <- 4.6
testfault <-    levelplot(UnCC ~ WfMult + ProdMult | Tr,
                 col.regions=grey(16:0/16),
                 data=hypodata)

If one enters
 > testfault

the you get the expected result (if a bit uninteresting). This being a 
blank first panel (hmmm, shouldn't it be 4.6) and then a second panel 
with a filled contour. (I have a much larger set of simulated data --- 
about 450 pages of figures, this 'blank' panel appears periodically and 
is of interest...)

If you do
< pdf(file="testfault.pdf") #Error
< testfault
< dev.off()
or postscript(...)

then the file is created. Try to open with pdf reader or ghost 
script---can't be done!, you get the following error from the pdf file:

"There was an error processing a page. Two Few operands."

and then you get....

"An unrecognized token '-1.#J' was found."

and then a blank sheet. Ghostscript returns the first occurrence of the 
token and then dies a proper death.

Upon opening the pdf file in a text editor one easily locates the 
following chunk of 'stuff'
......
pdf stuff>>ET
pdf stuff>>Q q -216.00 -216.00 864.00 864.00 re W n
pdf stuff>>Q q 49.70 37.14 153.47 358.88 re W n
pdf stuff>>1.000 1.000 1.000 rg
pdf stuff>>  -1.#J -1.#J m
pdf stuff>>  -1.#J -1.#J l
pdf stuff>>  -1.#J -1.#J l
pdf stuff>>  -1.#J -1.#J l
pdf stuff>>h f

A naive search and replace of -1.#J with 0.0 , and a save, does the 
trick. The file will now open in a pdf reader (as well as ghostscript). 
There is however, a message stating something to the effect that a 
problem has been found, but the file is being 'rebuilt'.

Now what is interesting is that the above is only a problem for the pdf 
and postscript devices --- other devices, e.g. win.metafile, png, jpg, 
etc. work fine .

(However a similar setup, I'll track it down it someone thinks it would 
be of use, will trigger a crash that seems to associated with the 
'ntdll.dll' dyn. lnk. library(?)
E.g from the event viewer I get...

Faulting application rgui.exe, version 1.70.30515.0, faulting module 
ntdll.dll, version 5.1.2600.1106, fault address 0x000267cd

0000: 6c707041 74616369 206e6f69 6c696146
0010: 20657275 75677220 78652e69 2e312065
0020: 332e3037 35313530 6920302e 746e206e
0030: 2e6c6c64 206c6c64 2e312e35 30303632
0040: 3031312e 74612036 66666f20 20746573
0050: 32303030 64633736 0a0d
)


If you use the data above and try things with the base package plots --- 
contour and filled.contour (for the constant 4.6 data),

contour gives the error message:
...stack imbalance in internal contour....
and plots an empty graphics box. However it saves to all of the devices 
exactly as on the screen device.

The following
 >filled.contour( x=seq(0,1,by=.1),
 >                y=seq(0,1,by=.1),
 >                z=matrix(rep(4.6,121),nrow=11,ncol=11))
gives  the expected 'slightly pink' filled contour and can be written to 
  all of the devices with no problem.

Thus it appear to me that there is some interaction between some of the 
devices and lattice (is the string "-1.#J" some kind of character set 
for NA or NaN or NULL???). I tried to find the area in the lattice code 
that seemed to deal with this issue  and found some call to (i guess) C 
code around lines 4554 which deal with 'NA's in the data....however I 
was a bit lost....(Also searching the base code I could find no 
reference to the error message returned from the contour(....) example 
above....)


In summary, is there a way to avoid this issue and keep the 'blank' 
panels, and not have to do this search and replace (on a 450 page pdf 
file it takes about 15 mins ....),

cheers,
Joel




More information about the R-help mailing list