r - 在 Rmd/RStudio 中与 cat 命令结合使用时不打印数据表

标签 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")
}

```

最佳答案

这与 knitr#1137 本质上是同一个问题。 HTML widgets ,包括 DT/DataTables,仅当它们是从顶级 R 表达式生成时才起作用。这是因为实际上只有顶级表达式被打印。仅评估不在顶层的表达式。两种情况有很大区别。打印涉及调用打印函数。在大多数情况下,这个函数毫不奇怪地是 print() (或 show() 对于 S4 对象)。在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()

}

关于r - 在 Rmd/RStudio 中与 cat 命令结合使用时不打印数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35176098/

相关文章:

r - slidify - 如何定位图像?

javascript - 在客户端使用PHP或JavaScript通过大量关键词逐一搜索大量数据

javascript - 为什么我的数据表数据设计在 JQuery Datatable 中无法正常工作?

r - 根据不同 tibble 的截止值更改 tibble 中不同列的值

r - 一种从 R 访问谷歌街景的方法?

r - 格子 levelplot 或 ggplot2 map R 的自定义图例

c# - 存储当前行索引的干净实现

r - 复数的虚数单位减少了 'knitr'

r - knitr 没有将数字对齐到 pdf 输出的中心?

r - 在 RMarkdown 中的数字周围添加空间