Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R、 Knitr,Rnw,美丽的科学数字_R_Latex_Knitr_Digit_Scientific Notation - Fatal编程技术网

R、 Knitr,Rnw,美丽的科学数字

R、 Knitr,Rnw,美丽的科学数字,r,latex,knitr,digit,scientific-notation,R,Latex,Knitr,Digit,Scientific Notation,我希望我的knitr代码生成的所有数字看起来不像老式的计算器 有没有办法像上一个那样得到数字(用·10代替e或e) 选项(scipen=…)似乎没有该选项 我一直在搜索信息,我发现可以直接在LaTex中使用siunitx包来完成,这样写每个数字\num{1e-10} 但我希望knitr能自动为所有数字,包括表中的数字 PD:当我打印一些东西时,如何避免这种情况 PD2:也许是gsub的问题 PD3: 我要回到这个问题上来。假设我没有定义自己的表,但我从回归中得到它,并使用xtable生成它 \

我希望我的knitr代码生成的所有数字看起来不像老式的计算器

有没有办法像上一个那样得到数字(用·10代替e或e)

选项(scipen=…)似乎没有该选项

我一直在搜索信息,我发现可以直接在LaTex中使用siunitx包来完成,这样写每个数字\num{1e-10}

但我希望knitr能自动为所有数字,包括表中的数字

PD:当我打印一些东西时,如何避免这种情况

PD2:也许是gsub的问题

PD3:
我要回到这个问题上来。假设我没有定义自己的表,但我从回归中得到它,并使用xtable生成它

\documentclass{article}
\usepackage{siunitx}
\usepackage{booktabs}
\sisetup{     group-minimum-digits = {3},    group-separator = {,}, exponent-product = \cdot     }
\begin{document}

<<r, results='asis'>>=

library(xtable)
data(tli)
fm2 <- lm(tlimth ~ sex*ethnicty, data = tli)
xxx <- xtable(fm2)
print(xxx, booktabs = TRUE)

@
\end{document}
\documentclass{article}
\usepackage{siunitx}
\usepackage{booktabs}
\sisetup{组最小位数={3},组分隔符={,},指数积=\cdot}
\开始{document}
=
图书馆(xtable)
数据(tli)
fm2<代码>---
输出:pdf\U文件
---
```{r,results='asis'}

x我更喜欢将格式设置为
siunitx
,但是R中的预处理可能会变得有点麻烦

---
output: 
  pdf_document: 
    keep_tex: yes
header-includes:
- \usepackage{siunitx}
- \usepackage{booktabs}
---

\sisetup{detect-all, tight-spacing=false, exponent-product = \cdot,
round-mode = figures,
round-precision = 3}

```{r, results='asis'}
as.sci_fy <- function(x) {class(x) <- c("sci_fy", class(x)); x}
format.sci_fy <-  function(x) sprintf("\\num{%e}", x)
print.sci_fy <- function(x) cat(format(x))


x <- 6.22e-21
as.sci_fy(x)

d <- data.frame(x=rnorm(10), y=rnorm(10), f=letters[1:10])
d <- lapply(d, function(c) if(is.numeric(c)) format(as.sci_fy(c)) else c)

library(xtable)
d <- xtable(data.frame(d, stringsAsFactors = FALSE))
 print(d, type="latex", align = c("l", "l", "l"),
        table.placement = "!htpb",
        floating.environment = "table",
        include.rownames=FALSE, 
       sanitize.text.function = function(x){x}, booktabs=TRUE)

```
---
输出:
pdf\U文件:
泰克斯:是的
标题包括:
-\usepackage{siunitx}
-\usepackage{booktabs}
---
\sisetup{detect all,紧密间距=false,指数乘积=\cdot,
圆形模式=数字,
圆精度=3}
```{r,results='asis'}

as.sci_fy我认为解决方案可能是这样的

beauty <- function(xx) {cat(gsub("\\s([-+]?[0-9]*\\.?[0-9]+)([eE]([-+]?[0-9]+))\\s", " $\\1\\\\cdot{}10^{\\3}$ ", xx, perl=T)) }

d <- data.frame(x=1:10*10000, y=1:10*1e22,f=letters[1:10])

beauty(print(xtable(d, digits=5, display=c("s","G", "G", "s")), type="latex"))

beauty如何将其应用于整个表o文档?假设您从回归xtable(lm(…)得到一个表。您将如何将您的方法应用于该表?@skan在我尝试的示例中,xtable将科学符号转换为标准(例如pvalue 2e-16到0.00)。由于xtable进行格式化并打印出一些字符,因此您可能需要对输出进行grep处理并插入格式化。对于您自己创建的输出,您可以像baptiste建议的那样应用格式或覆盖打印方法。这两种方法都比一个
options(something=…)
solution更具暴力性。我将在xtable网站上提交一个请求,要求他们添加一些选项来自动执行。对一个似乎没有任何作用的函数进行挖掘有什么意义?“函数(x){x}”我无法挖掘
?标识
。当您必须传递一个函数,但不希望它做任何事情时,它是必需的。在这里我不想要理智。那么你把函数传递给谁呢?我想我明白了,这是您在每个单元格上执行\num{}的方式,假设您从回归xtable(lm(…)得到一个表。你会如何将你的方法应用到那张表上?老实说,我对xtable不太了解
beauty <- function(xx) {cat(gsub("\\s([-+]?[0-9]*\\.?[0-9]+)([eE]([-+]?[0-9]+))\\s", " $\\1\\\\cdot{}10^{\\3}$ ", xx, perl=T)) }

d <- data.frame(x=1:10*10000, y=1:10*1e22,f=letters[1:10])

beauty(print(xtable(d, digits=5, display=c("s","G", "G", "s")), type="latex"))