[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