我刚刚开始写一些文档,Sweave/R我喜欢这个\sexpr{}命令让一个人直接在文本中写数字.
如果我有一个像这样的数字mus=0.0002433121,那么我可以把它四舍五入到一些小数位,例如
\Sexpr{round(mus,7)}
Run Code Online (Sandbox Code Playgroud)
如何用科学记数法写出来,即LaTeX输出
2.43 \times 10^{-4}
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我们可以控制输出的有效位数,如3吗?
我注意到,如果我指定,会sigma = 2000000自动写入一个数字2e + 06
\Sexpr{round(sigma,2)}.
Run Code Online (Sandbox Code Playgroud)
我希望它会写成
2 \times 10^6
Run Code Online (Sandbox Code Playgroud)
与我们在LaTeX符号中得到的相同,也许我们也可以控制有效数字的数量.
怎么做到这一点?
Sac*_*amp 15
我认为这个功能应该有效:
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=""))
}
Run Code Online (Sandbox Code Playgroud)
一些测试:
> 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"
Run Code Online (Sandbox Code Playgroud)
如果您希望结果处于数学模式,您可以$在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}
Run Code Online (Sandbox Code Playgroud)