R / Sweave formatting numbers with \Sexpr{} in scientific notation

后端 未结 2 1368
暗喜
暗喜 2021-02-04 07:23

I am just starting to write some documents with Sweave/R and I like the \\sexpr{} command that lets one tow write numbers directly within text.

2条回答
  •  别那么骄傲
    2021-02-04 07:28

    An example using siunitx link to pdf. In the preamble you can define your default options which you may override later in the document.

    For numeric output :

    num <- function(x,round_precision=NULL)
    {
      if (is.null(round_precision)) {
        return(sprintf("\\num{%s}", x))
      } else {
        return(sprintf("\\num[round-precision=%s]{%s}",round_precision, x))
      }
    }
    

    For scientific output :

    sci<- function(x,round_precision=NULL){
      if (is.null(round_precision)) {
      return(sprintf("\\num[scientific-notation = true]{%s}", x))
    } else {
      return(sprintf("\\num[round-precision=%s,scientific-notation = true]{%s}",round_precision, x))
    }
    }
    

    Here is a full reproducible .Rnw script (to be used with knitr ... for sweave use four antislashes in the functions instead of two see this SO post.)

    \documentclass[a4paper]{article}
    \usepackage{siunitx}
    %\usepackage{Sweave}
    \title{siunitx}
    
    \sisetup{
    round-mode = figures,
    round-precision = 3,
    group-separator = \text{~}
    }
    \begin{document}
    
    \maketitle
    <>=
    num <- function(x,round_precision=NULL)
    {
      if (is.null(round_precision)) {
        return(sprintf("\\num{%s}", x))
      } else {
        return(sprintf("\\num[round-precision=%s]{%s}",round_precision, x))
      }
    }
    
    sci<- function(x,round_precision=NULL){
      if (is.null(round_precision)) {
      return(sprintf("\\num[scientific-notation = true]{%s}", x))
    } else {
      return(sprintf("\\num[round-precision=%s,scientific-notation = true]{%s}",round_precision, x))
    }
    }
    
    @
    Examples :\\
    $num$ for number formatting :
    
    \begin{itemize}
    \item \textbf{num(pi, round\_precision=2)} $\Rightarrow$
    \num[round-precision=2]{3.14159265358979} 
    \item \textbf{num(pi, round\_precision=4)}  $\Rightarrow$
    \num[round-precision=4]{3.14159265358979}
    \item The default formatting (here round-precision=3) is taken from
    \textbf{\textbackslash sisetup} 
    \textbf{num(pi)}  $\Rightarrow$ \num{3.14159265358979}\\
    \end{itemize}
    
    \noindent $sci$ for scientific notation :
    
    \begin{itemize}
    \item \textbf{sci(12.5687e4)}  $\Rightarrow$ \num[scientific-notation =
    true]{125687}
    \item \textbf{sci(125687.11111)}  $\Rightarrow$
    \num[scientific-notation = true]{125687.11111}
    \item \textbf{sci(125687.11111, round\_precision=4)} $\Rightarrow$
     \Sexpr{sci(125687.11111, round_precision=4)}
    \end{itemize}
    
    \end{document}
    

提交回复
热议问题