I am trying to write a lesson on maximum likelihood with Sweave. I get a surprising result with the following code, lec4.Snw: \documentclass[a4paper,12pt]{article} \usepackage[latin1]{inputenc} \title{Maximum likelihood} \author{G伱伓ran Brostr伱伓m} \begin{document} \maketitle <<fig=TRUE>>## Simulate Y: n <- 25 Y <- sum(rpois(n, lambda = 1)) Y ## Define minusloglik: minusloglik <- function(theta) n * theta - Y * log(theta) curve(minusloglik, 0.2, 2, xlab = "theta") library(stats4) cat("Y is now ", Y, "\n") fit <- mle(minusloglik, start = list(theta = Y/n)) summary(fit) @ \end{document} In R, I get:> Sweave("lec4.Snw")Writing to file lec4.tex Processing code chunks ... 1 : echo term verbatim eps pdf Y is now 27 Y is now 24 You can now run LaTeX on 'lec4.tex'>and the latex document will have two different mle's, one in the figure, and another one from 'mle'. One uses Y = 27 and the other Y 24! I can save the situation by moving "Y <- ..." to a separaye "code chunk". Does 'fig=TRUE' imply that the code chunk is run twice? -- G伱伓ran Brostr伱伓m
>>>>> On Mon, 13 Feb 2006 11:16:14 +0100, >>>>> G??ran Brostr??m (GB) wrote:> I am trying to write a lesson on maximum likelihood with Sweave. I get > a surprising result with the following code, lec4.Snw: > \documentclass[a4paper,12pt]{article} > \usepackage[latin1]{inputenc} > \title{Maximum likelihood} > \author{G??ran Brostr??m} > \begin{document} > \maketitle > <<fig=TRUE>> > ## Simulate Y: > n <- 25 > Y <- sum(rpois(n, lambda = 1)) > Y > ## Define minusloglik: > minusloglik <- function(theta) n * theta - Y * log(theta) > curve(minusloglik, 0.2, 2, xlab = "theta") > library(stats4) > cat("Y is now ", Y, "\n") > fit <- mle(minusloglik, start = list(theta = Y/n)) > summary(fit) > @ > \end{document} > In R, I get: >> Sweave("lec4.Snw") > Writing to file lec4.tex > Processing code chunks ... > 1 : echo term verbatim eps pdf > Y is now 27 > Y is now 24 > You can now run LaTeX on 'lec4.tex' >> > and the latex document will have two different mle's, one in the > figure, and another one from 'mle'. One uses Y = 27 and the other Y > 24! > I can save the situation by moving "Y <- ..." to a separaye "code chunk". > Does 'fig=TRUE' imply that the code chunk is run twice? Yes, once to get all textual output, and then once for each graphics format requested. Best, -- ------------------------------------------------------------------- Friedrich Leisch Institut f??r Statistik Tel: (+43 1) 58801 10715 Technische Universit??t Wien Fax: (+43 1) 58801 10798 Wiedner Hauptstra??e 8-10/1071 A-1040 Wien, Austria http://www.ci.tuwien.ac.at/~leisch
> From: G??ran Brostr??m <goran.brostrom at gmail.com> > To: r-help at stat.math.ethz.ch > Date: Mon, 13 Feb 2006 11:16:14 +0100 > Subject: [R] Sweave, mle and curve > I am trying to write a lesson on maximum likelihood with Sweave. I get > a surprising result with the following code, lec4.Snw: > > \documentclass[a4paper,12pt]{article} > \usepackage[latin1]{inputenc} > > \title{Maximum likelihood} > > \author{G??ran Brostr??m} > > \begin{document} > > \maketitle > > <<fig=TRUE>>> ## Simulate Y: > n <- 25 > Y <- sum(rpois(n, lambda = 1)) > Y > ## Define minusloglik: > minusloglik <- function(theta) n * theta - Y * log(theta) > curve(minusloglik, 0.2, 2, xlab = "theta") > > library(stats4) > cat("Y is now ", Y, "\n") > fit <- mle(minusloglik, start = list(theta = Y/n)) > summary(fit) > @ > > \end{document} > > In R, I get: > > > Sweave("lec4.Snw") > Writing to file lec4.tex > Processing code chunks ... > 1 : echo term verbatim eps pdf > Y is now 27 > Y is now 24 > > You can now run LaTeX on 'lec4.tex' > > > > and the latex document will have two different mle's, one in the > figure, and another one from 'mle'. One uses Y = 27 and the other Y > 24! > > I can save the situation by moving "Y <- ..." to a separaye "code chunk". > Does 'fig=TRUE' imply that the code chunk is run twice? > > -- > G??ran Brostr??mWhich figure did you use ? The .eps or the .pdf ? I guess one of them has Y=24. The problem is that Sweave runs the code twice, to get the .eps plot and the .pdf plot. The solution is to isolate the "random" code in a separate chunk. I think this issue was adressed some time ago in this list. HTH, Jean-Christophe Bou??tt??.