3

我正在尝试使用.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 
----------------------------------
4

3 回答 3

1

设置round对数字的数量没有任何直接影响(尽管由于可能使数字变得无关紧要(0)而产生了一些间接影响)。这里的主要问题是pander不允许您设置将设置的nsmall参数format()

以非科学格式格式化实数/复数时小数点右侧的最小位数。允许的值为 0 <= nsmall <= 20。

但是由于 pander 只向您提供数值,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"
)

这导致:

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

 2    description string     9999.68

 3    description string    10000.64
------------------------------------
于 2017-11-20T23:01:50.900 回答
0

?panderOptions页面指出“数字”被传递到format它被解释为“有效数字”的数量。有效数字实际上与小数位几乎没有关系。十进制值 0.000041 中可以有 2 个有效数字。您可以看到参数对您的format()-ed 值的影响:

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

您确实希望将“round”选项保持在 2。

于 2016-04-21T19:27:42.680 回答
0

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

```{r pander-table}
panderOptions('round',2)
panderOptions('digits',7)
panderOptions('keep.trailing.zeros',TRUE)
pander(dt, split.cell = 80, split.table = Inf)
```
于 2020-04-13T16:41:55.183 回答