2013-11-25 4 views
6

Я знаю, что это довольно старая проблема, и это обсуждалось ранее, но я не могу заставить ее работать должным образом.Как установить количество десятичных знаков в отчете, создаваемом с помощью knitr/pander?

У меня есть уценки документ, и я хотел бы использовать knitr и pander производить .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):

enter image description here

+0

См [мой ответ] (https://stackoverflow.com/a/47402570/7196903) на очень похожий вопрос для обхода к общей проблеме создания пандера всегда отображается _ такое же число десятичных знаков :) –

ответ

6

насчет:

> 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 там или применять крючки, чтобы сделать это автоматически.


Update: нет необходимости устанавливать количество цифр здесь, как вы после установки количества знаков после запятой, СРЮ:

> 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

+0

kedves @daroczig;) благодарит много и надеется на отличную работу с 'pander'. Однако ваше решение не работает с первой таблицей (см., Например, значение F, которое должно быть 15.36). Любые мысли, почему ...? – sparrow

+0

@sparrow спасибо, что обратил мое внимание на эту проблему! Я только что обновил свой ответ на основе быстрой интуиции, но PLS дать мне некоторое время, чтобы спать на нем, и я обязательно вернусь к этой проблеме и подумать о том, что происходит в фоновом режиме - надеюсь, завтра. – daroczig

9

У вас исп.

options(scipen=1, digits=2) 

как в http://yihui.name/knitr/demo/output/?

+0

Да, у меня есть. Проблема в том, что (1) таблицы 'pander()' не затрагиваются и (2), если вы укажете, например. 'model2 = lm (вес ~ 1, chickwts); AIC (model1, model2)' Я получаю 'model1 7 778 model2 2 823' без десятичных знаков, что не просто эстетическая проблема. – sparrow

+0

Основная проблема заключается в том, что pander не позволяет вам предоставить аргумент 'format()' ansmart'. См. [Мой ответ] (https://stackoverflow.com/a/47402570/7196903) на очень похожий вопрос для обходного пути :) –

 Смежные вопросы

  • Нет связанных вопросов^_^