数据表不与Rmd / RStudio中的cat命令一起打印

时间:2016-02-03 11:41:44

标签: r datatable knitr r-markdown

有人可以解释为什么在Rmd代码中(使用RStudio生成HTML报告)下面只显示cat命令?当我在cat子句之外移动if命令或将其注释掉时,表格将被打印出来。我相信使用library(printr)时会发生同样的事情,但我没有用最小的样本证实这一点。

似乎if子句中的代码以某种方式一起解释,并且catdatatable不一致。

如果你能给我一些关于如何调试它的线索,它也会有所帮助。由于没有任何警告/错误消息。

---
title: "test"
output: 
  html_document
---


```{r}
if(TRUE){
  DT::datatable(iris)
  cat("I am here with my cat")
}

```

1 个答案:

答案 0 :(得分:6)

这与knitr#1137基本相同。 HTML widgets(包括DT / DataTables)仅在从顶级 R表达式生成时才起作用。这是因为只有顶层表达式实际上是打印。不在顶级的表达式仅评估。这两种情况有很大的不同。打印涉及调用打印功能。在大多数情况下,对于S4对象,此函数毫不奇怪print()(或show())。在 knitr 世界中,它比这更复杂:默认打印功能是knitr::knit_print,它与print()非常相似,但它除了生成文本输出,其收集正在打印的对象的元数据(例如,HTML依赖性)。编织完成后, rmarkdown 会将元数据解析为适当的HTML代码(例如<script src="dataTables.js"></script>中的<head>)。

总而言之,如果表达式不在顶层,则既不进行打印也不进行元数据收集,因此无法实际呈现窗口小部件。

一个简单的例子来说明这一点:

if (TRUE) {

  1:10  # not printed

  11:20 # printed because this is the visible value returned by if()

}