使用knitr和R Markdown,我可以使用以下命令从矩阵产生一个表格式输出:
```{r results='asis'}
kable(head(x))
```
但是,我正在寻找一种隐含kable
代码的方法,因为我不想用它来混淆回显的代码。基本上,我想要这个:
```{r table=TRUE}
head(x)
```
...产生一个格式化的表格(而不是正常的output='markdown'
)输出。
我实际上认为这一定非常简单,因为这是一个非常明显的要求,但我无法通过文档或网络找到任何方法来实现这一目标。
我创建输出挂钩的方法失败,因为一旦数据到达挂钩,它的已经格式化,不再是原始数据。即使指定results='asis'
,钩子也会将输出作为字符串而不是矩阵。这是我尝试过的:
default_output_hook <- knit_hooks$get('output')
knit_hooks$set(output = function (x, options)
if (! is.null(options$table))
kable(x)
else
default_output_hook(x, options)
)
但就像我说的那样,由于x
不是原始矩阵而是字符串,因此失败,并且我指定的results
选项的值无关紧要。
答案 0 :(得分:3)
如今,您可以在YAML标头中设置df_print
:
---
output:
html_document:
df_print: kable
---
```{r}
head(iris)
```
答案 1 :(得分:2)
我认为其他答案是从以下方法不起作用的时候开始的,但是现在我们可以这样做:
```{r results='asis', render=pander::pander}
head(x)
```
或为设置块中的所有块设置此值,例如:
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, render=pander::pander)
```
答案 2 :(得分:1)
缺乏更好的解决方案我正在重新解析我在钩子中收到的字符串表示。我在这里发布,因为它有点工作。但是,解析数据框的字符串表示永远不是完美的。除了我自己的数据之外,我没有尝试过以下任何内容,我完全希望它可以在一些常见的用例中打破。
reparse <- function (data, comment, ...) {
# Remove leading comments
data <- gsub(sprintf('(^|\n)%s ', comment), '\\1', data)
# Read into data frame
read.table(text = data, header = TRUE, ...)
}
default_output_hook <- knit_hooks$get('output')
knit_hooks$set(output = function (x, options)
if (is.null(options$table))
default_output_hook(x, options)
else {
extra_opts <- if (is.list(options$table)) options$table else list()
paste(kable(do.call(reparse, c(x, options$comment, extra_opts))),
collapse = '\n')
}
)
如果R markdown comment
选项设置为包含正则表达式特殊字符(例如*
)的字符序列,则此将中断,因为R似乎不合适有一个明显的方法可以逃避正则表达式。
这是一个用法示例:
```{r table=TRUE}
data.frame(A=1:3, B=4:6)
```
您可以将额外参数传递给deparse
函数。这是必要的,例如当表包含NA
值时,因为read.table
默认将它们解释为字符串:
```{r table=list(colClasses=c('numeric', 'numeric'))}
data.frame(A=c(1, 2, NA, 3), B=c(4:6, NA))
```
远非完美,但至少它有效(在很多情况下)。
答案 3 :(得分:1)
不完全符合您的要求,但我在这里发布了一个答案(这不符合评论),因为您描述的工作流程与我最初的目标和用例在我开始工作时非常相似我的pander
套餐。虽然我非常喜欢knitr
中提供的大量块选项,但我希望有一个引擎可以使创建文档变得非常简单,自动且无需任何调整。我知道knitr
钩子非常强大这一事实,但我只是想在我的Rprofile
中设置一些东西,让文字编程工具没有进一步的麻烦,结果是{ {3}}对我而言。
主要的想法是指定一些选项(你使用什么降价风格,你的小数点是什么,你的图表最喜欢的颜色等),然后简单地用brew语法编写你的报告,没有任何块选项,并且您的代码结果将自动转换为降价。然后用Pandoc将其转换为pdf / docx / odt等。