#knitr #numeric #summary
#knitr #числовая #Краткие сведения
Вопрос:
Я пытаюсь разработать воспроизводимый отчет об исследовании, который включает в себя распечатанный вывод переменных распределений входных наборов данных.
Меня смущает результат summary() в небольшом примере ниже. Когда я оцениваю код непосредственно на консоли, я получаю ‘b’ — это весь 2012 год, как и ожидалось, однако, когда я запускаю это с помощью knit2html(), он отображается как 2010.
dat <- data.frame(a = letters, b = rep(2012, length(letters)))
str(dat)
## 'data.frame': 26 obs. of 2 variables:
## $ a: Factor w/ 26 levels amp;quot;aamp;quot;,amp;quot;bamp;quot;,amp;quot;camp;quot;,amp;quot;damp;quot;,..: 1 2 3 4 5 6 7 8 9 10 ...
## $ b: num 2012 2012 2012 2012 2012 ...
dd <- lapply(dat, summary)
dd
## $a
## a b c d e f g h i j k l m n o p q r s t u v w x y z
## 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
##
## $b
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 2010 2010 2010 2010 2010 2010
sessionInfo()
## R version 3.1.0 (2014-04-10)
## Platform: x86_64-pc-linux-gnu (64-bit)
##
## locale:
## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=C
## [4] LC_COLLATE=C LC_MONETARY=C LC_MESSAGES=C
## [7] LC_PAPER=C LC_NAME=C LC_ADDRESS=C
## [10] LC_TELEPHONE=C LC_MEASUREMENT=C LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] knitr_1.5
##
## loaded via a namespace (and not attached):
## [1] evaluate_0.5.1 formatR_0.9 stringr_0.6.2 tools_3.1.0
Ответ №1:
В фрагментах кода options("digits")
knitr значение по умолчанию равно 4. summary
Функция имеет digits
аргумент, который по умолчанию max(3, getOption("digits")-3)
равен (см. ?summary
). Это приводит summary
к округлению 2012 года до трех значащих цифр, в результате чего получается 2010 год.
Вы можете либо увеличить этот digits
параметр в своем фрагменте кода:
options(digits=7)
Или укажите digits
аргумент в вашем вызове summary
:
dd <- lapply(dat, summary, digits=4)
Комментарии:
1. спасибо, я хочу, чтобы это было общим, поэтому подумываю об использовании
summary2 <- function(x){ summa <- summary(x, digits = nchar(max(x)) 3) return(summa) }