r - 使用 R-markdown knitr hooks 自定义 HTML 报告中的表格格式
问题描述
我正在尝试在我的 HTML 报告中设置一个knitr::knit_hooks()
自动格式化 R-markdown 块的数据框输出。kableExtra
我不想在每个列表数据块的末尾重复添加以下行(或任何行):
head(iris) %>%
kable("html") %>%
kable_styling("hover", full_width = FALSE)
我提出了一个基于此答案的解决方案,该解决方案通过评估块源来工作(请参阅下面的答案,其中包括我使用这种方法遇到的一些问题);我希望使用块输出可能会有更好的解决方案。
这是一个示例 .Rmd,其中概述了我想要实现的目标。
---
title: "Untitled"
author: "Paul"
date: "25 September 2018"
output: html_document
---
```{r setup, include = F}
library(dplyr)
library(kableExtra)
library(knitr)
data(iris)
default_source_hook <- knit_hooks$get('source')
knit_hooks$set(
output = function(x, options) {
x %>%
kable("html") %>%
kable_styling("hover", full_width = FALSE)
},
source = function(x, options) {
if(is.null(options$table))
default_source_hook(x, options)
else {
eval(parse(text = x)) %>%
kable("html") %>%
kable_styling("hover", full_width = F)
}}
)
```
Desired chunk input:
```{r test, echo = F}
head(iris)
```
Desired output will look like:
```{r output, echo = F}
head(iris) %>%
kable("html") %>%
kable_styling("hover", full_width = FALSE)
```
Solution using the source chunk output:
```{r table_format, results = "hide", table = T, eval = F}
head(iris)
```
谢谢你。
解决方案
如果不需要使用针织钩,以下可能会有所帮助。这个想法是只定义一个函数,它可以按照你想要的方式打印它得到的任何东西。这并没有消除所有的打字,但大大减少了它。
---
title: "Untitled"
author: "Paul"
date: "25 September 2018"
output: html_document
---
```{r setup, include = F}
library(dplyr)
library(kableExtra)
library(knitr)
tbl_out <- function(data) {
data %>% kable("html") %>% kable_styling("hover", full_width = FALSE)
}
```
Prints as desired:
```{r test, echo = F}
head(iris) %>% tbl_out()
```
输出:
推荐阅读
- json - 使用转义序列解析 JSON 字符串
- while-loop - 关于结束while循环的说明
- java - Java将字符串拆分为列表
- ios - 保存过滤的 FetchedResults 时 CoreData 崩溃
- machine-learning - 关于深度学习模型的 ROC
- android - Android Studio 4.1 中缺少 Logcat
- react-native - React Native:将图像源声明为函数时出现问题?
- optimization - C# 有助于缩短遵循明显模式的代码长度
- ios - 如何使隐私请求弹出窗口脱颖而出?重新安装应用程序时弹出窗口被白屏覆盖
- python - 使用 FastApi 读取动态 FormData