[R] Problem with large/small numbers in knitr

mlell08 mlell08 at gmail.com
Mon Jan 28 11:19:29 CET 2013


On 26.12.2012 23:28, xiaodao wrote:
> I have problems with very large numbers using knitr. In the following, my a
> and b are extremely small and ssrr and ssru are extremely large. 

> 
> \documentclass{article}
> \begin{document}
> 
> <<setup, echo=FALSE, cache=FALSE>>=
> ## numbers >= 10^5 will be denoted in scientific notation,
> ## and rounded to 2 digits
> options(scipen = 1, digits = 2)
> 
> <<>>=
> a<-1e-13
> b<-2.5e-10
> ssrr<-123456.12
> ssru<-123400.00
> @
> 
> $
> c=\Sexpr{a}/\Sexpr{b} % either this formula or the following formula will
> has error message "missing $" after click "complie" in Rstudio.
> f=\Sexpr{ssrr-ssru}/\Sexpr{ssru}
> $
> 
> \end{document}
> 

I copied your file to "abc.Pnw", then opened an R session and run
setwd("<Path_to_file>")
library(knitr)
knit("abc.Rnw")

I got the following text in the resulting abc.tex file:


$
c=$10^{-13}$/$2.5\times 10^{-10}$ % either this formula or ...
f=56.12/$1.23\times 10^{5}$
$

knitr converts large numbers in Sexpr to the exponential notation, so
you've got a nested math environment here.

You can convert your numbers to strings with as.character()

Alternative:
if you run knit_hooks$get("inline") you get the function used for inline
output procession


https://github.com/yihui/knitr/issues/33


-> if you write
knit_hooks$set()$inline
function (x)
{
    if (is.numeric(x))
        x = round(x, getOption("digits"))
    paste(as.character(x), collapse = ", ")
}

in your setup chunk (did you forget the closing @ in your setup chunk?),
it also works. (which is strange, because this function is exactly what
is predefinded by knitr but that's another question

Regards, Moritz
-- 
GnuPG Key: 0x7340821E



More information about the R-help mailing list