我知道这是一个相当老的问题,之前已经讨论过,但是我无法按预期工作。

我有一个markdown文档,我想使用knitrpander生成一个.docx报告,该报告具有一致的数字格式,带有两个小数,例如对于内联和块输出,均为0.12、3.60、14.00或163.21 。我已阅读此线程How to avoid using round() in every \Sexpr{}?,建议该线程pander可以自动执行此操作。但是,它似乎对我不起作用。请让我知道我在这里想念的东西。

剧本:

```{r, echo=FALSE}
library(knitr)
opts_chunk$set(echo = FALSE, message = FALSE, results = 'asis')
```

```{r}
require(pander)
panderOptions('digits' , 2) #this should do the trick, right?
```

Test
=====

Let's produce some test stats:


```{r}
model1 = lm(weight~feed, chickwts)
anova.m1 = anova(model1)
pander(anova.m1)
pander(coef(summary(model1)))
```

In-line R codes: "Type of food affects body mass of the chicks
(F~`r anova.m1$Df[1]`,`r anova.m1$Df[2]`~ = `r anova.m1$F[1]`, p =  `r anova.m1$Pr[1]`)."


```{r}
FILE <- "Test"
system(paste0("pandoc -o ", FILE, ".docx ", FILE, ".md"))
```


但是结果不是我期望的(请注意,小数的范围几乎是0到7之间的所有值):

最佳答案

关于什么:

> library(pander)
> panderOptions('digits', 2)
> panderOptions('round', 2)
> panderOptions('keep.trailing.zeros', TRUE)
> pander(anova.m1)

----------------------------------------------------------
    &nbsp;       Df   Sum Sq   Mean Sq   F value   Pr(>F)
--------------- ---- -------- --------- --------- --------
   **feed**      5    231129    46226      15        0

 **Residuals**   65   195556    3009
----------------------------------------------------------

Table: Analysis of Variance Table

> pander(coef(summary(model1)))

----------------------------------------------------------------
      &nbsp;         Estimate   Std. Error   t value   Pr(>|t|)
------------------- ---------- ------------ --------- ----------
  **(Intercept)**     323.58      15.83       20.44      0.00

 **feedhorsebean**   -163.38      23.49       -6.96      0.00

  **feedlinseed**    -104.83      22.39       -4.68      0.00

 **feedmeatmeal**     -46.67      22.90       -2.04      0.05

  **feedsoybean**     -77.15      21.58       -3.58      0.00

 **feedsunflower**     5.33       22.39       0.24       0.81
----------------------------------------------------------------


关于内联R块:还在那里调用pander或应用一些挂钩自动执行此操作。



更新:设置小数位数后,无需像在这里那样设置位数,对:

> library(pander)
> panderOptions('round', 2)
> panderOptions('keep.trailing.zeros', TRUE)
> model1 = lm(weight~feed, chickwts)
> anova.m1 = anova(model1)
> pander(anova.m1)

----------------------------------------------------------
    &nbsp;       Df   Sum Sq   Mean Sq   F value   Pr(>F)
--------------- ---- -------- --------- --------- --------
   **feed**      5    231129    46226     15.36      0

 **Residuals**   65   195556    3009
----------------------------------------------------------

Table: Analysis of Variance Table

> pander(coef(summary(model1)))

----------------------------------------------------------------
      &nbsp;         Estimate   Std. Error   t value   Pr(>|t|)
------------------- ---------- ------------ --------- ----------
  **(Intercept)**     323.58      15.83       20.44      0.00

 **feedhorsebean**   -163.38      23.49       -6.96      0.00

  **feedlinseed**    -104.83      22.39       -4.68      0.00

 **feedmeatmeal**     -46.67      22.90       -2.04      0.05

  **feedsoybean**     -77.15      21.58       -3.58      0.00

 **feedsunflower**     5.33       22.39       0.24       0.81
----------------------------------------------------------------




进一步更新:以及为什么它与第二个表中的集合digits一起使用的第一次运行:

> format(c(0.01, 15.36 ), digits = 2)
[1] " 0.01" "15.36"
> format(15.36, digits = 2)
[1] "15"


并且pandoc.table在基于列的基础上运行format,以便基于用户请求,列中的数字将具有相同的小数位数(即使该选项设置为TRUE的尾随零)。

如果这看起来像个错误,请在GitHub上打开一个问题:https://github.com/Rapporter/pander

关于r - 如何设置用knitr/pander生成的报告中的小数位数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20199176/

10-13 09:17