2011-12-03 14 views
15

मैं बस Sweave/R के साथ कुछ दस्तावेज़ लिखना शुरू कर रहा हूं और मुझे \sexpr{} कमांड पसंद है जो एक को टेक्स्ट के भीतर सीधे लिखने की संख्या देता है।वैज्ञानिक नोटेशन में Sexpr {} के साथ आर/स्वीवे स्वरूपण संख्या

यदि मेरे पास mus=0.0002433121 जैसी संख्या है, तो मैं इसे कई दशमलव स्थानों जैसे राउंड कह सकता हूं उदा।

\Sexpr{round(mus,7)} 

कैसे वैज्ञानिक संकेतन अर्थात LaTeX के रूप में यह लिखने के लिए

2.43 \times 10^{-4} 

outputting किया जाएगा और हम नियंत्रित कर सकते हैं सार्थक अंकों की संख्या इस उदाहरण में 3 की तरह outputted हो के लिए?

मैं ध्यान दें कि sigma = 2000000 की तरह एक नंबर 2e + 06 लिए स्वचालित रूप से लिखा है कि अगर मैं निर्दिष्ट

\Sexpr{round(sigma,2)}. 

मैं पसंद करेंगे कि यह लिखा जाएगा के रूप में

2 \times 10^6 

ही के रूप में हम LaTeX अंकन में मिलेगा और शायद हमें महत्वपूर्ण अंकों की संख्या को नियंत्रित करने की संभावना भी दे रही है।

इसे कैसे प्राप्त करें?

उत्तर

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

@ सच्चा।दिलचस्प और उपयोगी। बहुत बहुत धन्यवाद और 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

यहाँ एक पूर्ण प्रतिलिपि प्रस्तुत करने योग्य .Rnw स्क्रिप्ट है (साथ knitr प्रयोग की जाने वाली ... के लिए दोबारा के बजाय फ़ंक्शन में चार एंटीस्लाश का उपयोग करें 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} 
संबंधित मुद्दे