数据表未与 Rmd / RStudio 中的 cat 命令结合打印
Datatable is not printed in combination with cat command in Rmd / RStudio
有人可以解释为什么在下面的 Rmd 代码(使用 RStudio 生成 HTML 报告)中只显示 cat
命令吗?当我将 cat
命令移到 if
子句之外或将其注释掉时,会打印 table 。我相信使用 library(printr)
时会发生同样的事情,但我还没有用最少的样本证实这一点。
似乎 if
子句中的代码以某种方式一起解释,并且 cat
与 datatable
不相配。
如果你能给我一些关于如何调试它的线索,那也会很有帮助。因为根本就没有 warnings/error 条消息。
---
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 代码(例如 <head>
中的 <script src="dataTables.js"></script>
)。
综上所述,如果表达式不在顶层,则既不会打印也不会收集元数据,因此无法真正呈现小部件。
一个简单的例子来说明这一点:
if (TRUE) {
1:10 # not printed
11:20 # printed because this is the visible value returned by if()
}
有人可以解释为什么在下面的 Rmd 代码(使用 RStudio 生成 HTML 报告)中只显示 cat
命令吗?当我将 cat
命令移到 if
子句之外或将其注释掉时,会打印 table 。我相信使用 library(printr)
时会发生同样的事情,但我还没有用最少的样本证实这一点。
似乎 if
子句中的代码以某种方式一起解释,并且 cat
与 datatable
不相配。
如果你能给我一些关于如何调试它的线索,那也会很有帮助。因为根本就没有 warnings/error 条消息。
---
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 代码(例如 <head>
中的 <script src="dataTables.js"></script>
)。
综上所述,如果表达式不在顶层,则既不会打印也不会收集元数据,因此无法真正呈现小部件。
一个简单的例子来说明这一点:
if (TRUE) {
1:10 # not printed
11:20 # printed because this is the visible value returned by if()
}