[R] empty files created with trellis xyplot jpeg device

R. Michael Weylandt michael.weylandt at gmail.com
Sun Jan 1 10:40:02 CET 2012


I'm guessing R FAQ 7.22: http://cran.r-project.org/doc/FAQ/R-FAQ.html

The subtlety is that in an interactive session print is automatically
called at the final evaluation of most everything, but you have to
prompt it in interactive use (and depending on details, in some
function calls)

Michael Weylandt

On Sat, Dec 31, 2011 at 6:50 PM, Mike Dahman <mike.dahman at gmail.com> wrote:
> New years greetings.
>
> I have been setting up a function to generate multiple jpeg charts. When
> the calls are issued at the interactive console, the jpeg files are
> generated without an issue. When I try to issue the same calls from a
> function, some chart files are empty. It appears to only be related to
> trellis charts. Any help to troubleshoot this is appreciated.
>
> Regards,
>
> -mike
>
>
> R version 2.14.0 (2011-10-31)
> Copyright (C) 2011 The R Foundation for Statistical Computing
> ISBN 3-900051-07-0
> Platform: x86_64-unknown-linux-gnu (64-bit)
>
>
> # validate devices
>> capabilities()
>    jpeg      png     tiff    tcltk      X11     aqua http/ftp  sockets
>    TRUE    FALSE    FALSE    FALSE     TRUE    FALSE     TRUE     TRUE
>  libxml     fifo   cledit    iconv      NLS  profmem    cairo
>    TRUE     TRUE     TRUE     TRUE     TRUE    FALSE    FALSE
>
> # Example functionality from the interactive console::::
>
> # I am going to use a zone variable to help duplicate the code in the
> function
>> zone
> [1] "isoranp-z1"
>
> # call a function to pull in data and assign it to a data frame
>> testz<-get_zonedata_url(2011,51,zone)
>
> # validate the data frame
>> str(testz)
> 'data.frame':   2016 obs. of  14 variables:
>  $ ts     : Factor w/ 2016 levels "12/18/2011 00:00",..: 1 2 3 4 5 6 7 8 9
> 10 ...
>  $ server : Factor w/ 1 level "phx1npf4sn2": 1 1 1 1 1 1 1 1 1 1 ...
>  $ zone   : Factor w/ 1 level "isoranp-z1": 1 1 1 1 1 1 1 1 1 1 ...
>  $ pool   : Factor w/ 1 level "ORA-S1": 1 1 1 1 1 1 1 1 1 1 ...
>  $ cpucap : num  4 4 4 4 4 4 4 4 4 4 ...
>  $ memcap : int  26 26 26 26 26 26 26 26 26 26 ...
>  $ swapcap: int  26 26 26 26 26 26 26 26 26 26 ...
>  $ cpu    : num  78.2 206.8 198.4 366.4 112.1 ...
>  $ poolsz : int  42 42 42 42 42 42 42 42 42 42 ...
>  $ mem    : num  75.5 75.3 75.6 74.5 74.3 ...
>  $ swp    : num  80.2 80.1 79.6 79 78.9 ...
>  $ dates  : chr  "12/18/2011" "12/18/2011" "12/18/2011" "12/18/2011" ...
>  $ times  : chr  "00:00:00" "00:05:00" "00:10:00" "00:15:00" ...
>  $ dt     :Classes 'chron', 'dates', 'times'  atomic [1:2016] 15326 15326
> 15326 15326 15326 ...
>  .. ..- attr(*, "format")= chr [1:2] "m/d/y" "h:m:s"
>  .. ..- attr(*, "origin")= Named num [1:3] 1 1 1970
>  .. .. ..- attr(*, "names")= chr [1:3] "month" "day" "year"
>
> # set up a jpeg device
>> trellis.device(jpeg,file=paste("charts/",zone,".zone_util.jpg",sep=""))
>
> # call a function to generate the chart
> # the plot_zone_util function uses xyplot
>> plot_zone_util(testz)
>
> #close the device
>> dev.off()
>
> The jpeg file is generated as expected:
> (User and group has been removed)
>
> ls -l isoranp-z1.zone_util.jpg
> -rw-rw-r-- 1 <> <> 32123 Dec 31 16:13 isoranp-z1.zone_util.jpg
>
> # here is the plot_zone_util function for reference
> plot_zone_util <- function(zone_df){
>
>    xyplot(cpu~dt|server,data=zone_df,ylim=c(0,100),
>           main=paste(zone_df$zone[1]," CPU (Blue) & Memory (Red)
> Util\n",zone_df$ts[1],"-",zone_df$ts[nrow(zone_df)],sep=""),
>           xlab="date",
>           ylab="utilization (%)",
>           panel=function(x,y,subscripts){
>               panel.lines(x,y)
>
>  panel.lines(zone_df$dt[subscripts],zone_df$mem[subscripts],col="red")
>    }, as.Table=T, subscripts=T)
> }
>
>
> ##############################################
>
> # Try and do the same thing within a function:::
>
>> gen_zone_charts(zone,2011,51)
>
> # Note the zone_util.jpg file is zero length. It is a lattice chart.
> The other two charts generate ok. User and group has been removed.
>
> -rw-rw-r-- 1 <> <> 22376 Dec 31 16:20 isoranp-z1.zone_cpu.jpg
> -rw-rw-r-- 1 <> <> 18910 Dec 31 16:20 isoranp-z1.zone_mem.jpg
> -rw-rw-r-- 1 <> <>     0 Dec 31 16:20 isoranp-z1.zone_util.jpg
>
> # here is the gen_zone_charts function:
>
>> gen_zone_charts
> function(zone,year,wk){
>
>        data_frame<-get_zonedata_url(year,wk,zone)
>
>        # this results in a 0 length file
> # i have tried using jpeg(), and trellis.device() with the same results
>        #jpeg(file=paste("charts/",zone,".zone_util.jpg",sep=""))
>
> trellis.device(jpeg,file=paste("charts/",zone,".zone_util.jpg",sep=""))
>        #uses xyplot - works fine being called from the console
>        plot_zone_util(data_frame)
>        dev.off()
>
>        # this works ok
>        jpeg(file=paste("charts/",zone,".zone_cpu.jpg",sep=""))
>        # uses combination of boxplot and plot with a preceeding par()
>        plot_zone_cpu(data_frame)
>        dev.off()
>
>        # this works ok
>        jpeg(file=paste("charts/",zone,".zone_mem.jpg",sep=""))
>        # uses combination of plot and plot with a preceeding par()
>        plot_zone_mem(data_frame)
>        dev.off()
>
> }
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.



More information about the R-help mailing list