On Jun 24, 2011, at 11:27 AM, Matt Shotwell wrote:

Ravi,

Consider using an environment (i.e. a 'reference' object) to store the
results, avoiding string manipulation, and the potential for loss of
precision:

fr <- function(x, env) {   ## Rosenbrock Banana function
   x1 <- x[1]
   x2 <- x[2]
   f <- 100 * (x2 - x1 * x1)^2 + (1 - x1)^2
   if(exists('fout', env))
       fout <- rbind(get('fout', env), c(x1, x2, f))

So _that's_ what a reference object is?

This seems to give the same results in this example. Am I committing any sins by sneaking around the get()?

    if(exists('fout', env))
       fout <- rbind(env[['fout']], c(x1, x2, f))  # seems more direct

Thinking I also might be able to avoid the later assign(), I tried these without success.

fr <- function(x, env) {   ## Rosenbrock Banana function
   x1 <- x[1]
   x2 <- x[2]
   f <- 100 * (x2 - x1 * x1)^2 + (1 - x1)^2
   if(exists('fout', env))
       env[['fout']] <- rbind(env[['fout']], c(x1, x2, f))
   else
       fout <- c(x1=x1, x2=x2, f=f)

   f
}

out <- new.env()
ans <- optim(c(-1.2, 1), fr, env=out)
out$fout
# NULL

Is there no '[[<-' for environments? (Also tried '<<-' but I know that is sinful/ )

--
David.
   else
       fout <- c(x1=x1, x2=x2, f=f)
   assign('fout', fout, env)
   f
}

out <- new.env()
ans <- optim(c(-1.2, 1), fr, env=out)
out$fout

Best,
Matt


On Fri, 2011-06-24 at 15:10 +0000, Ravi Varadhan wrote:
Thank you very much, Jim.  That works!

I did know that I could process the character strings using regex, but was also wondering if there was a direct way to get this.

Suppose, in the current example I would like to obtain a 3-column matrix that contains the parameters and the function value:

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))

Now, I need to tweak your solution to get the 3-column matrix. It would be nice, if there was a more direct way to get the numerical output, perhaps a numeric option in capture.output().

Best,
Ravi.

-------------------------------------------------------
Ravi Varadhan, Ph.D.
Assistant Professor,
Division of Geriatric Medicine and Gerontology School of Medicine Johns Hopkins University

Ph. (410) 502-2619
email: rvarad...@jhmi.edu

-----Original Message-----
From: jim holtman [mailto:jholt...@gmail.com]
Sent: Friday, June 24, 2011 10:48 AM
To: Ravi Varadhan
Cc: r-help@r-project.org
Subject: Re: [R] How to capture console output in a numeric format

try this:

fr <- function(x) {   ## Rosenbrock Banana function
+    on.exit(print(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))
# convert to numeric
fvals <- as.numeric(sub("^.* ", "", fvals))

fvals
[1] 24.20000000000000 7.09529600000000 15.08000000000000 4.54169600000000 [5] 6.02921600000000 4.45625600000000 8.87993600000000 7.77785600000000 [9] 4.72812500000000 5.16790100000000 4.21000000000000 4.43767000000000 [13] 4.17898900000000 4.32602300000000 4.07081300000000 4.22148900000000 [17] 4.03981000000000 4.89635900000000 4.00937900000000 4.07713000000000 [21] 4.02079800000000 3.99360000000000 4.02458600000000 4.11762500000000 [25] 3.99311500000000 3.97608100000000 3.97108900000000 4.02390500000000 [29] 3.98080700000000 3.95257700000000 3.93217900000000 3.93534500000000


On Fri, Jun 24, 2011 at 10:39 AM, Ravi Varadhan <rvarad...@jhmi.edu> wrote:
Hi,

I would like to know how to capture the console output from running an algorithm for further analysis. I can capture this using capture.output() but that yields a character vector. I would like to extract the actual numeric values. Here is an example of what I am trying to do.

fr <- function(x) {   ## Rosenbrock Banana function
  on.exit(print(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))

Now, `fvals' contains character elements, but I would like to obtain the actual numerical values. How can I do this?

Thanks very much for any suggestions.

Best,
Ravi.

-------------------------------------------------------
Ravi Varadhan, Ph.D.
Assistant Professor,
Division of Geriatric Medicine and Gerontology School of Medicine Johns Hopkins University

Ph. (410) 502-2619
email: rvarad...@jhmi.edu<mailto:rvarad...@jhmi.edu>


      [[alternative HTML version deleted]]

______________________________________________
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.





--
Matthew S. Shotwell
Assistant Professor, Department of Biostatistics
School of Medicine, Vanderbilt University
1161 21st Ave. S2323 MCN Office CC2102L
Nashville, TN 37232-2158

______________________________________________
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.

David Winsemius, MD
West Hartford, CT

______________________________________________
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.

Reply via email to