小数点后的平均位数

时间:2016-04-21 18:31:28

标签: r r-markdown pander

我正在尝试使用.rmd文件中的pander输出一个表作为pdf,小数点后面有2位数,但是我没有使用以下rmd的数字:

---
title: "Long table test"
output: pdf_document
---

Here is a table:

```{r setup}
library (data.table)
library (pander)

set.seed(1984)
longString <- "description string"
dt <- data.table(id=c(1:3),description=rep(longString,3),value=rnorm(3,mean=10000,sd=1))
```

```{r pander-table}
panderOptions('round',2)
panderOptions('digits',2)
panderOptions('keep.trailing.zeros',TRUE)
pander(dt, split.cell = 80, split.table = Inf)
```

结果

-------------------------------
 id     description      value 
---- ------------------ -------
 1   description string  10000 

 2   description string  10000 

 3   description string  10001 
-------------------------------

想看看

----------------------------------
 id     description      value 
---- ------------------ ----------
 1   description string  10000.41 

 2   description string   9999.68 

 3   description string  10000.64 
----------------------------------

3 个答案:

答案 0 :(得分:1)

设置round对数字位数没有任何直接影响(尽管由于可能呈现的数字无关紧要而导致一些间接影响(0))。这里的主要问题是pander不允许您设置nsmall的{​​{1}}参数设置

  

以非科学格式格式化实数/复数中小数点右边的最小位数。允许值为0 <= nsmall&lt; = 20。

但是,由于pander只将数值提供给format(),您可以通过将值format()提供给pander来解决这个问题:

as.character()

导致:

library (data.table)
library(magrittr)
library (pander)

set.seed(1984)
longString <- "description string"
dt <- data.table(id = c(1:3),
                 description = rep(longString, 3),
                 value = rnorm(3, mean = 10000, sd = 1))

pander(
  x = dt %>% mutate(value = value %>% round(2) %>% as.character()),
  split.cell = 80,
  split.table = Inf,
  justify = "ccr"
)

答案 1 :(得分:0)

?panderOptions页面显示&#39;数字&#39;被传递给format,在那里它被解释为&#34;有效数字&#34;的数量。重要数字实际上与小数位几乎没有关系。您可以在小数值0.000041中包含2位有效数字。您可以在format() - ed值中看到参数的效果:

> format(c( 10000.41,  9999.68, 10000.64 ), digits=2)
[1] "10000" "10000" "10001"

你确实希望保持&#34; round&#34;选项2。

答案 2 :(得分:0)

问题出在digits部分。您必须将数字增加到小数点前后的最大位数。您最大的数字(有关数字)在小数点前(例如10000.41)有5位数字,在小数点后有2位数字。因此,您需要将数字设置为7,然后在2处舍入(舍入)。

```{r pander-table}
panderOptions('round',2)
panderOptions('digits',7)
panderOptions('keep.trailing.zeros',TRUE)
pander(dt, split.cell = 80, split.table = Inf)
```