knitr - 奇怪的行为摘要(数字)打印不同于str()的值

时间:2014-06-25 13:18:33

标签: knitr numeric summary

我正在尝试开发一个可重复的研究报告,其中包括输入数据集的可变分布的打印输出。

我对下面的小例子中的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 &quot;a&quot;,&quot;b&quot;,&quot;c&quot;,&quot;d&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 个答案:

答案 0 :(得分:1)

在knitr代码块中,options("digits")默认为4. summary函数的digits参数默认为max(3, getOption("digits")-3)(参见?summary)。这导致summary将2012年的三位数转为三位数,从而导致2010年。

您可以在代码块中增加digits选项:

options(digits=7)

或者在您对digits的调用中指定summary参数:

dd <- lapply(dat, summary, digits=4)