我注意到kable
这种奇怪的行为 - 漂亮的打印在运行一块后消失了。
> knitr::kable(head(iris, 3))
| Sepal.Length| Sepal.Width| Petal.Length| Petal.Width|Species |
|------------:|-----------:|------------:|-----------:|:-------|
| 5.1| 3.5| 1.4| 0.2|setosa |
| 4.9| 3.0| 1.4| 0.2|setosa |
| 4.7| 3.2| 1.3| 0.2|setosa |
现在做文件>新文件> R笔记本。这将创建一个演示笔记本,其中包含一个包含plot(cars)
的块。在笔记本中执行该块
> plot(cars)
然后再次打印表格。这次输出看起来不同。为什么呢?
> knitr::kable(head(iris, 3))
[1] "| Sepal.Length| Sepal.Width| Petal.Length| Petal.Width|Species |"
[2] "|------------:|-----------:|------------:|-----------:|:-------|"
[3] "| 5.1| 3.5| 1.4| 0.2|setosa |"
[4] "| 4.9| 3.0| 1.4| 0.2|setosa |"
[5] "| 4.7| 3.2| 1.3| 0.2|setosa |"
attr(,"format")
[1] "markdown"
attr(,"class")
[1] "knit_asis"
attr(,"knit_cacheable")
[1] NA
> packageVersion("knitr")
[1] ‘1.17’
> sessionInfo()
R version 3.3.3 (2017-03-06)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X El Capitan 10.11.6
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
loaded via a namespace (and not attached):
[1] tools_3.3.3 highr_0.6 knitr_1.17
> RStudio.Version()
$citation
To cite RStudio in publications use:
RStudio Team (2016). RStudio: Integrated Development for R. RStudio,
Inc., Boston, MA URL http://www.rstudio.com/.
A BibTeX entry for LaTeX users is
@Manual{,
title = {RStudio: Integrated Development Environment for R},
author = {{RStudio Team}},
organization = {RStudio, Inc.},
address = {Boston, MA},
year = {2016},
url = {http://www.rstudio.com/},
}
$mode
[1] "desktop"
$version
[1] ‘1.0.153’
答案 0 :(得分:1)
运行该块时,搜索列表中的tools:rstudio
环境会更改为添加名为print.knitr_kable
的函数,该函数与knitr
包中的内部函数不同。
这是我之前看到的:
> ls("tools:rstudio")
[1] "debugSource" "knit_with_parameters"
[3] "registerShinyDebugHook" "RStudio.Version"
[5] "rstudioDiagnosticsReport" "RStudioGD"
[7] "source.with.encoding"
以下是我看到的内容:
> ls("tools:rstudio")
[1] "debugSource" "dplyr_tibble_print_original"
[3] "knit_with_parameters" "print.knitr_kable"
[5] "registerShinyDebugHook" "RStudio.Version"
[7] "rstudioDiagnosticsReport" "RStudioGD"
[9] "source.with.encoding"
无论出于何种原因,执行tools:rstudio
函数而不是原始函数。我可以通过运行detach("tools:rstudio")
来恢复原来的行为,但是这会以多种方式搞砸Rstudio,所以我不推荐它。一种不那么极端的方式就是说
e <- as.environment("tools:rstudio")
e$print.knitr_kable <- knitr:::print.knitr_kable
但这不会持续:每当你在笔记本中运行一个块时,RStudio显然都会修复它。您也可以在每次打印时进行显式调用,例如
knitr:::print.knitr_kable(knitr::kable(head(iris, 3)))
最好的解决方案可能是knitr
更改,因此它可以在RStudio笔记本中运行时执行RStudio所需的功能,否则执行漂亮的打印,或者当RStudio更改为运行knitr
函数时不是在笔记本电脑中,但我认为这不是一个重要的优先事项:如果你正在运行笔记本电脑,为什么你会关心你在控制台看到的内容?