pander number of digits after decimal point

强颜欢笑 提交于 2019-12-31 02:59:46

问题


I am trying to output a table using pander in a .rmd file as a pdf with 2 digits following the decimal point, but I get no digits using the following 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)
```

results in

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

 2   description string  10000 

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

Would like to see

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

 2   description string   9999.68 

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

回答1:


Setting round doesn't have any direct influence on the number of digits (though some indirect influence due to potentially rendering digits insignificant (0)). The main problem here is pander doesn't allow you to set the nsmall parameter of format() which would set

the minimum number of digits to the right of the decimal point in formatting real/complex numbers in non-scientific formats. Allowed values are 0 <= nsmall <= 20.

But since pander only feeds numeric values to format() you can simply work around this by feeding the values as.character() to pander:

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"
)

which results in:

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

 2    description string     9999.68

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



回答2:


The ?panderOptions page notes that 'digits' is passed to format where it is interpreted as the number of "significant digits". Significant digits really have very little to do with decimal places. You can have 2 significant digits in a decimal value of 0.000041. You can see the effect of your parameter on your format()-ed values:

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

You do want to keep the "round" option at 2.



来源:https://stackoverflow.com/questions/36777740/pander-number-of-digits-after-decimal-point

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!