R /用科学计数法用\ Sexpr {}格式化数字

yCa*_*ran 15 latex r sweave

我刚刚开始写一些文档,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)