2011-12-03 19 views
15

Sweave/Rという書類を書き始めたばかりで、\sexpr{}コマンドのようにテキスト内に数字を直接書き込むことができます。科学的表記で Sexpr {}を使用した書式設定番号

数字がmus=0.0002433121の場合は、小数点以下の桁数に丸めて指定できます。

\Sexpr{round(mus,7)} 
LaTeX

2.43 \times 10^{-4} 

を出力されるように、すなわち、科学的表記法でそれを書くためにどのように

、我々は有効桁数は、この例では3のように出力されるように制御することができますか?

私はそれが

2 \times 10^6 
我々は LaTeX表記になるだろうと同じ

のように書かれることを好む私は

\Sexpr{round(sigma,2)}. 

を指定した場合sigma = 2000000などの数が2e + 06に自動的に書き込まれていることに注意してくださいおそらく有効数字の数を制御する可能性も与えます。

これを行うには?

答えて

14

私はこの機能が動作するはずだと思う:

sn <- function(x,digits) 
{ 
    if (x==0) return("0") 
    ord <- floor(log(abs(x),10)) 
    x <- x/10^ord 
    if (!missing(digits)) x <- format(x,digits=digits) 
    if (ord==0) return(as.character(x)) 
    return(paste(x,"\\\\times 10^{",ord,"}",sep="")) 
} 

一部のテスト:

> sn(2000000) 
[1] "2\\\\times 10^{6}" 
> sn(0.001) 
[1] "1\\\\times 10^{-3}" 
> sn(0.00005) 
[1] "5\\\\times 10^{-5}" 
> sn(10.1203) 
[1] "1.01203\\\\times 10^{1}" 
> sn(-0.00013) 
[1] "-1.3\\\\times 10^{-4}" 
> sn(0) 
[1] "0" 

あなたが数学モードで結果をしたい場合は、paste()コールで$サインを入力することができます。

編集:ここでは

ははSweave例です。

\documentclass{article} 

\begin{document} 
<<echo=FALSE>>= 
sn <- function(x,digits) 
{ 
    if (x==0) return("0") 
    ord <- floor(log(abs(x),10)) 
    x <- x/10^ord 
    if (!missing(digits)) x <- format(x,digits=digits) 
    if (ord==0) return(as.character(x)) 
    return(paste(x,"\\\\times 10^{",ord,"}",sep="")) 
} 
@ 

Blablabla this is a pretty formatted number $\Sexpr{sn(0.00134,2)}$. 

\end{document} 
+1

私が準備していたのと同じ回答で私を打つ。 :) –

+0

0と負の場合も含めるように関数を変更しました。 –

+0

@ Sacha。興味深くて便利です。ありがとう、1票アップ。 – yCalleecharan

0

siunitxlink to pdfを使用した例。プリアンブルでは、既定のオプションを定義できます。このオプションは、後でドキュメントでオーバーライドすることができます。科学的成果のために

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

siunitx example

がknitrで使用する完全な再現性の.Rnwスクリプト(...のためにあります2つではなく機能で4つのアンチカードが使用されていますSO postを参照してください)

\documentclass[a4paper]{article} 
\usepackage{siunitx} 
%\usepackage{Sweave} 
\title{siunitx} 

\sisetup{ 
round-mode = figures, 
round-precision = 3, 
group-separator = \text{~} 
} 
\begin{document} 

\maketitle 
<<sanitize_number,echo=FALSE>>= 
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} 
関連する問題