Hi, it looks like save() is saving all contents of the calling environments if the object to be saved is *not* evaluated, although it is not that simple either. After many hours of troubleshooting, I'm still confused. Here is a reproducible example (also attached) with output. I let the code and the output talk for itself:
peek <- function(file, from=1, to=500) { cat("--------------------------------------\n") cat(sprintf("%s: %d bytes\n", file, file.info(file)$size)) bfr <- suppressWarnings(readBin(file, what="character", n=to)) bfr <- gsub("(\001|\002|\003|\004|\005|\016|\020|\036|\a|\n|\t)", "", bfr); bfr <- bfr[nchar(bfr) > 0]; cat(bfr, sep="", "\n"); } saveCache <- function(file, y, sources=NULL, eval=FALSE) { if (eval) dummy <- is.null(sources) base::save(file=file, sources, compress=FALSE) } aVariableNotSaved <- double(1e6) main <- function() { # This 'big' variable is saved in case 1 below! big <- rep(letters, length.out=1e5) identifier <- "This string will be saved too!" y <- 1 file <- "a.RData" saveCache(y, file=file) peek(file) file <- "a-eval.RData" saveCache(y, file=file, eval=TRUE) peek(file) file <- "b-noy.RData" saveCache(file=file) peek(file) file <- "b-noy-eval.RData" saveCache(file=file, eval=TRUE) peek(file) } # 1. Call saveCache() outside main() eval(body(main)) # -------------------------------------- # a.RData: 238 bytes # RDX2Xsources²filea.RData y²n $ n¦$eval¦¦¦n¦ # -------------------------------------- # a-eval.RData: 58 bytes # RDX2Xsources¦¦ # -------------------------------------- # b-noy.RData: 230 bytes # RDX2Xsources²file?b-noy.RData ¶yv$ n¦$eval¦¦¦n¦ # -------------------------------------- # b-noy-eval.RData: 58 bytes # RDX2Xsources¦¦ # 2. Call saveCache() from within main() main() # -------------------------------------- # a.RData: 900412 bytes # RDX2Xsources²filea.RData y² a.RData ?=identifierThis # string will be saved too!bigåáabcdefghijklmnopqrstuv # wxyzabcdefghijklmnopqrstuvwxyzabcdefg # -------------------------------------- # a-eval.RData: 58 bytes # RDX2Xsources¦¦ # -------------------------------------- # b-noy.RData: 230 bytes # RDX2Xsources²file?b-noy.RData ¶yv$ n¦$eval¦¦¦n¦ # -------------------------------------- # b-noy-eval.RData: 58 bytes # RDX2Xsources¦¦ What is going on? I get this on both R v2.3.0 patched (2006-04-28 r37936) and R v2.3.1 beta (2006-05-23 r38179) on my WinXP (with Rterm --vanilla).
______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel