r - 如何直接从 R 脚本生成 html 报告?
问题描述
我有一个 R 脚本,比如说 myscript.R,它做了很多事情,最终输出是一个包含许多不同组件的列表对象。我想将列表传递给一个函数,该函数生成一个 html 报告“注入”预格式化模板中的各种组件。代码是这样的:
main_fun = function() {
# do some stuff
d1 = list(
a = 42,
b = "foo",
c = c("elem1","elem2","elem3")
)
generate_report(d1)
}
generate_report = function(data) {
# generate html report
}
(实际上显然列表的组件的值是“做一些事情”部分的输出)
我是 R Markdown 和 knitr 的新手,有一种方法可以动态生成 html 报告,调用代码中的函数?没有 .rmd 降价文件,也没有将整个脚本传递给类似的函数
rmarkdown::render('myscript.R')
解决方案
此解决方案采用字符串形式的代码并创建 Rmd 文件并将其呈现为 html:
编辑1:我还应该提到我只在RStudio上测试过这个......
my_markdown_rederer <- function(text) {
rmd_file_name <- "temp.Rmd"
yaml_header <- "---
output:
html_document:
toc: true
fig_caption: true
theme: flatly
---"
content <- paste0(yaml_header,
"\n",
"\n",
"```{r, echo=FALSE}\n",
text,
"\n",
"```\n")
write(content, rmd_file_name)
rmarkdown::render(rmd_file_name)
utils::browseURL(paste0("file://", utils::URLencode(gsub("Rmd$", "html", rmd_file_name))))
}
text <- 'd1 = list(
a = 42,
b = "foo",
c = c("elem1","elem2","elem3"))
d1'
my_markdown_rederer(text)
编辑 2:我们也可以直接使用已经存在的 .R 文件
text <- 'd1 = list(
a = 42,
b = "foo",
c = c("elem1","elem2","elem3"))
d1'
# Create .R file for example where we make html from an existing file
#
fileConn <- file("file_with_original_pure_R_code.R")
writeLines(text, fileConn)
close(fileConn)
# Example using an existing .R file
#
file_handler <- file("file_with_original_pure_R_code.R")
text <- paste0(readLines(file_handler), collapse="\n")
close(file_handler)
my_markdown_rederer(text)
编辑 3: yaml 标头甚至可能不是必需的
推荐阅读
- c - 暂停 Linux 进程的内部原理是什么?
- sql - 我想在 SQL 查询的 WHERE 子句中使用一个变量,没有结果,也没有错误
- javascript - 布局改变后如何使用CSS保持下方黄色块和黑色块之间10px的间距?
- youtube - YouTube 视频在会员视频中嵌入 iFrame 失败
- heroku - 设置域和子域
- grafana - Grafana - 整合来自 Watts 的 KWH,但带有图表
- java - 将一个二维数组的坐标复制到另一个数组
- algorithm - strtof() 的实现,浮点乘法和尾数舍入问题
- zxing - @zxing/ngx-scanner 无法扫描数据矩阵码
- android - Android - TextView wrap_content 在数字文本时不起作用