R语言 | 如何使用R书写html文档?

更灵活的书写方式,可以直接看3.

1. 可用函数

  • cat()函数
  • writeLines()函数
  • sink()函数重定向输出到HTML文件

小结:cat()适合简单HTML,writeLines()适合多行内容,sink()适合复杂场景。

说明:尽可能不用R包,减少依赖变动风险。

方法1: 使用cat()直接输出

复制代码
cat('<!DOCTYPE html>
<html>
<head>
<title>My Page</title>
</head>
<body>
<h1>Hello World</h1>
</body>
</html>', file="output.html")

方法2: 使用writeLines()

复制代码
html_content <- c('<!DOCTYPE html>','<html>','<head>',
                 '<title>My Page</title>','</head>',
                 '<body>','<h1>Hello World</h1>',
                 '</body>','</html>')
writeLines(html_content, "output.html")

方法3: 使用sink()

复制代码
sink("output.html")
cat('<!DOCTYPE html>\n')
cat('<html>\n')
cat('<head>\n')
cat('<title>My Page</title>\n')
cat('</head>\n')
cat('<body>\n')
cat('<h1>Hello World</h1>\n')
cat('</body>\n')
cat('</html>\n')
sink()

2. 逐句拼凑html文件

如果不同R文件、同一个R文件的不同位置都要输出信息到同一个html报告文件中呢?

  • 使用函数 cat的 append=T参数: cat('\n</body>\n</html>', file = filepath, append = TRUE)

(1)先定义库函数:

复制代码
# 初始化HTML文件
init_html <- function(filepath) {
  writeLines('<!DOCTYPE html>\n<html>\n<head>\n<title>Project Output</title>\n</head>\n<body>', 
             filepath)
}

# 添加HTML片段
add_html_section <- function(filepath, content, section_title) {
  section <- paste0('\n<h2>', section_title, '</h2>\n<div>', content, '</div>')
  cat(section, file = filepath, append = TRUE)
}

# 完成HTML文件
finalize_html <- function(filepath) {
  cat('\n</body>\n</html>', file = filepath, append = TRUE)
}

逐个写入函数有局限性,需要定义好h2和子内容。

(2)在不同位置写文档:

复制代码
 项目不同位置使用示例
output_file <- "project_output.html"

# 位置1:初始化文件
init_html(output_file)

# 位置2:数据分析模块
analysis_result <- "<p>数据分析结果...</p>"
add_html_section(output_file, analysis_result, "分析报告")

# 位置3:可视化模块
plot_html <- "<img src='plot.png' alt='分析图表'>"
add_html_section(output_file, plot_html, "可视化结果")

# 位置4:最终完成
finalize_html(output_file)

3. 自由写html文件,自定义各种标签

如果想更自由的写各种html标签呢?

(1)核心函数

复制代码
con <- file(outputFile, "w") #打开文件,如果想追加,使用oepn="a"
writeLines(something, con) #写文本
close(con) #关闭文件

(2)包装函数

复制代码
# functions
html=function(text, tag, fw=con){
    rs=sprintf("<%s>%s</%s>", tag, text, tag)
    writeLines(rs, fw)
}
htmlRaw=function(text, fw=con){
    writeLines(text, fw)
}
# 类似的,可以包装更多函数
h1=function(text){ html(text, "h1")}
h2=function(text){ html(text, "h2")}

R2=function(num){
    round(num, 2)
}

now=function(){
  as.character( format(Sys.time(), '%Y%m%d_%H%M%S') )
}

(3)用法

复制代码
html("End --", "p")

htmlRaw("<div class=box>")

Ref:

相关推荐
牧码岛9 小时前
Web前端之Vue+Element打印时输入值没有及时更新dom的问题
前端·javascript·html·web·web前端
一颗不甘坠落的流星1 天前
【HTML】iframe 标签 allow 权限汇总(例如添加复制粘贴权限)
前端·javascript·html
Want5952 天前
HTML音乐圣诞树
前端·html
我命由我123452 天前
微信开发者工具 - 模拟器分离窗口与关闭分离窗口
前端·javascript·学习·微信小程序·前端框架·html·js
我有一棵树2 天前
file 协议与 http 协议的区别:为什么本地 HTML 无法加载相对路径 JS,以及正确的解决方式
javascript·http·html
华仔啊2 天前
图片标签用 img 还是 picture?很多人彻底弄混了!
前端·html
合作小小程序员小小店2 天前
网页开发,在线%新版本旅游管理%系统,基于eclipse,html,css,jquery,servlet,jsp,mysql数据库
java·数据库·eclipse·html·intellij-idea·旅游·jsp
风止何安啊2 天前
收到字节的短信:Trae SOLO上线了?尝尝鲜,浅浅做个音乐播放器
前端·html·trae
今日无bug2 天前
🥁 用 HTML5 打造你的第一个“敲击乐” Web 应用
html
李@十一₂⁰3 天前
HTML 特殊字体符号
前端·html