Hi Gabor, That almost works ... but it fails when I nest with.options() within another function:
with.options <- function(...) { L <- as.list(match.call())[-1] len <- length(L) old.options <- do.call(options, L[-len]) on.exit(options(old.options)) invisible(eval.parent(L[[len]])) } with.width <- function(w) with.options(width=w, print(1:25)) m.with.width(10) > Error in function (...) : object "w" not found Enter a frame number, or 0 to exit 1: with.width(10) 2: with.options(width = w, print(1:25)) 3: do.call(options, L[-len]) 4: function (...) I tried, unsuccessfully, to fix the problem by using eval.parent() around do.call() and around L[-len]. This problem does not occur if I use my original implementation: with.options <- function(..., expr) { options0 <- options(...) tryCatch(expr, finally=options(options0)) } I realize that I can use my original implementation in this particular case, but I'd like to have a single implementation that works correctly, while not requiring explicitly naming the expr argument. TIA On Feb 12, 2008 12:43 PM, Gabor Grothendieck <[EMAIL PROTECTED]> wrote: > Try this: > > with.options <- function(...) { > L <- as.list(match.call())[-1] > len <- length(L) > old.options <- do.call(options, L[-len]) > on.exit(options(old.options)) > invisible(eval.parent(L[[len]])) > } > > > with.options(width = 40, print(1:25)) > [1] 1 2 3 4 5 6 7 8 9 10 11 12 > [13] 13 14 15 16 17 18 19 20 21 22 23 24 > [25] 25 > > with.options(width = 80, print(1:25)) > [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 > 25 > > > > > > On Feb 12, 2008 12:45 PM, Alistair Gee <[EMAIL PROTECTED]> wrote: > > I often want to temporarily modify the options() options, e.g. > > > > a <- seq(10000001, 10000001 + 10) # some wide object > > > > with.options <- function(..., expr) { > > options0 <- options(...) > > tryCatch(expr, finally=options(options0)) > > } > > > > Then I can use: > > > > with.options(width=160, expr = print(a)) > > > > But I'd like to avoid explicitly naming the expr argument, as in: > > > > with.options(width=160, print(a)) > > > > How can I do this with R's argument matching? (I prefer the expr as > > the last argument since it could be a long code block. Also, I'd like > > with.options to take multiple options.) > > > > TIA > > > > > ______________________________________________ > > R-help@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. > > > ______________________________________________ R-help@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.