2016-04-21 2 views
2

Я пытаюсь вывести таблицу с помощью потворствовать в .rmd файл в формате 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 
---------------------------------- 
+0

Моим первым изменением было бы отказаться от использования цифр. Если он связан с функцией signif в R, это будет иметь эффект, который вы видите: 'signif (mean (rnorm (1000,1000)), 2)' возвращает '[1] 1000'. И 'signif (среднее значение (rnorm (10,1000, 200)), 2)' возвращает '[1] 990' –

+0

Увеличение' цифр' до 7. – daroczig

+0

Установка цифр в 7 даст мне «9999,677' (т. Е. 3 цифры после десятичное место) или '10000.64'. Если я установил цифры в 7 и круглые до 2 'panderOptions (« цифры », 7); panderOptions ('round', 2) ', тогда я получаю желаемый результат. Похоже, что больше работать, чем общее решение, поскольку оно не может применяться последовательно ко всем данным, мне нужно знать, сколько цифр у меня будет в моих данных и соответствующим образом отрегулировать. Было бы неплохо, если бы pander вел себя так же, как 'kable (x, digits = 2)', что приводит к 2 цифрам после десятичного. –

ответ

0

?panderOptions страница говорит, что я 'цифры' s передано в format, где оно интерпретируется как число «значащих цифр». Значительные цифры действительно очень мало связаны с десятичными знаками. Вы можете иметь 2 значащих цифры в десятичном значении 0,000041. Вы можете увидеть эффект вашего параметра на ваших format() -ED значений:

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

Вы хотите держать «круглый» вариант на 2.

+0

удаление «panderOptions» («цифры», 2) 'и сохранение' panderOptions ('round', 2) 'произвело тот же результат. –

+0

Возможно, настройка цифр «прочная»? Вы пытались установить его на NA или 7? –

+0

@ 42- установка 'цифр' на' 7' приведет к желаемым результатам, см. Мой комментарий выше. – daroczig

0

Установка round не имеет никакого прямого влияния на количество цифр (хотя некоторое косвенное влияние из-за потенциального отображения цифр незначительно (0)). Основная проблема здесь является потворствовать не позволяет установить параметр nsmall из format(), который будет установлен

минимального количества цифр справа от десятичной точки при форматировании действительных/комплексных чисел в ненаучных форматах , Допустимые значения 0 < = nsmall < = 20.

Но поскольку потворствовать только питает числовые значения format() вы можете просто обойти эту проблему путем подачи значения 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 
------------------------------------