cacheSweave <- function(name, expr, envir = parent.frame()) { if(!file.exists(name)) { env <- new.env() local(eval(expr), env) save(list = ls(env, all.names = TRUE), file = name, compress = TRUE, envir = env) for(n in ls(env, all.names = TRUE)) assign(n, get(n, env), envir) } else load(name, envir) }