On Fri, Jun 24, 2011 at 11:16 AM, William Dunlap <wdun...@tibco.com> wrote: > Try using dput(f) instead of print(f) and > use eval(parse(text=capture.output(...))). > > I would tend to use something like > OUTPUTS <- list() > fr <- function(x) { > on.exit(OUTPUTS[[length(OUTPUTS)+1]] <<- list(x=x,f=f)) > ... compute and return f > } > so you don't have to use capture.output. > (You can use trace() to automate this sort > of thing.) >
A variation of this is to use a proto object (or to use environments directly at the expense of slightly more code). Below we keep all the loose ends (i.e. aMatrix and fr) in p. Note that p$fr automatically fills in the first argument of fr so that the version that ultimately gets passed to optim only has one argument, x. fr <- function(p, x) { ## Rosenbrock Banana function on.exit(p$aMatrix <- rbind(p$aMatrix,cbind(x1, x2, f))) x1 <- x[1] x2 <- x[2] f <- 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 f } library(proto) p <- proto(fr = fr, aMatrix = NULL) fvals <- capture.output(ans <- optim(c(-1.2,1), p$fr)) p$aMatrix By the way, in my example using gsubfn another possibility might be to assume that the last line of output defines the number of fields that are to be used. That gives this which is intermediate in length between the other two gsubfn solutions: fr <- function(x) { ## Rosenbrock Banana function on.exit(print(cbind(x1, x2, f))) x1 <- x[1] x2 <- x[2] f <- 100 * (x2 - x1 * x1)^2 + (1 - x1)^2 f } fvals <- capture.output(ans <- optim(c(-1.2,1), fr)) library(gsubfn) fvals.numeric <- strapply(fvals, "[-0-9]+[.][0-9]*", as.numeric) n <- length(tail(fvals.numeric, 1)[[1]]) do.call(rbind, Filter(function(x) length(x) == n, fvals.numeric)) -- Statistics & Software Consulting GKX Group, GKX Associates Inc. tel: 1-877-GKX-GROUP email: ggrothendieck at gmail.com ______________________________________________ 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.