使用Rmarkdown写博客(如知乎、优快云)

为什么使用使用Rmarkdown写博客?

  • 现在的博客如知乎、优快云等一般都支持Markdown写作
  • R的Rmarkdown集成了Markdown、Rcode和Rcode输出,非常适用于展示数据分析报告
  • Rmarkdown的*.Rmd文件可以导出为*.md文件
  • 当写作有关于R的内容时,特别是其中含有代码及运行结果,使用Rmarkdown写作并导出md文件时,其中的Markdown说明文字、Rcode和Rcode输出如图片、表格等均能良好显示。且R代码会以文字的形式(而非图片)出现在结果中,以方便读者复制后运行。
  • 另Ramrkdown除了支持R以外,也支持Python、SQL等众多语言,Rmarkdown使用这些语言时该方法依旧适用

写作流程

  1. 使用Rmarkdown写作
  2. *.Rmd文件运行并导出为*md文件
  3. *.md文件中Rcode生成的图片的本地路径修改为图床路径
  4. 直接将修改后的*md文件内容粘贴到优快云或使用mdnice转化后粘贴到知乎

使用Rmarkdown写作时的几个技巧

第一个cell:setup设置

  • 控制Rmarkdown中后续所有cell的默认行为
  • comment = “#” 表示Rcode运行结果默认以"#"开头,方便区分Rcode与结果
  • collapse = T 表示每一个cell的输出默认合并在一起:
  • fig.height和fig.width控制Rcode生成图片的大小
knitr::opts_chunk$set(comment = "#", collapse = T, 
                      fig.height = 5, fig.width = 5)

collapse设置对cell输出的影响见下

collapse = T的结果

print("hello")
# [1] "hello"
print("hello")
# [1] "hello"

collapse = F的结果

print("hello")
# [1] "hello"
print("hello")
# [1] "hello"

展示表格

使用knitr::kable函数将data.frame导出为markdown形式的表格

knitr::kable(head(iris), format = "markdown")
Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSpecies
5.13.51.40.2setosa
4.93.01.40.2setosa
4.73.21.30.2setosa
4.63.11.50.2setosa
5.03.61.40.2setosa
5.43.91.70.4setosa

展示回归结果

broom包可以整理回归结果为data.frame,因而可以配合knitr::kable函数进行展示
使用broom::tidy函数展示回归系数、标准误、假设检验P值等

knitr::kable(broom::tidy(lm(iris$Sepal.Length ~ iris$Sepal.Width)))
termestimatestd.errorstatisticp.value
(Intercept)6.52622260.478896313.6276310.0000000
iris$Sepal.Width-0.22336110.1550809-1.4402870.1518983

使用broom::glance函数展示回归汇总统计量,如 R 2 R^2 R2 A I C AIC AIC B I C BIC BIC

knitr::kable(broom::glance(lm(iris$Sepal.Length ~ iris$Sepal.Width)))
r.squaredadj.r.squaredsigmastatisticp.valuedflogLikAICBICdeviancedf.residual
0.01382270.00715930.82509662.0744270.15189832-182.9958371.9917381.0236100.7561148

导出md文件

将写作完成的*.Rmd文件保存,打开新的Rconsole运行以下代码,即可导出*.md文件。注意应将input和output参数修改为实际的文件名和路径

knitr::knit(input = "./*.Rmd", output = "./*.md")

修改Rcode生成图片的路径

*.md文件中Rcode生成的图片的本地路径修改为图床路径

  • 非Rcode生成的图片,在Rmarkown写作中直接使用图床路径,因而导出*.md文件后不需要再修改
  • 在导出*.md文件时,若有Rcode生成的图片,则会自动生成figure文件夹,里面是Rcode生成的图片
  • 导出的*.md文件中图片为本地路径,故需要挨个上传到图床并在*.md文件中更改为图床路径

如果Rcode生成的图片非常多,挨个上传图片并将本地路径更改为图床路径也是一件比较费时间的事,可以参考以下思路自动完成这个过程:

  • *.md文件本质上是一个文本文件,因而可以直接读入到R中
  • 图片上传到图床时,生成的url地址一般为“图床路径”+“图片名称”
  • 使用正则表达式匹配*.md文件中Rcode生成图片的本地路径
  • 将匹配到的本地路径修改为图床路径,然后保存为新的*.md文件即可

参考代码

library(readr) # 使用read_file和write_file读写md文件
library(stringr) # 使用str_extract_all提取md文件中图片的本地路径
rm(list = ls()) # 清空工作空间!!!

# 读入md文件为字符串
md <- read_file("./博客.md")

# 从字符串中提取Rcode生成图片的名称
fig_png <- unlist(str_extract_all(string = md, pattern = "figure..*\\.png"))

png <- c()
for (i in 1:length(fig_png)) {
  png <- c(png, unlist(strsplit(fig_png[i], split = "/"))[2])
}

# 将md文件中图片的本地路径修改为图床路径
# https://*****/img/为我的图床地址
for (i in 1:length(png)) {
  new_md <- str_replace_all(string = md, 
                          pattern = png[i], 
                          replacement = paste0("https://*****/img/", png[i]))
}

# 保存新的md文件;打开后发现Rcode生成图片的本地路径已全部修改为图床路径
write_file(md, "./new_r_parse_eval.md")

粘贴md文件内容到博客

  • 优快云支持类似$\sum_{i=1}^{n}$的LaTeX代码,可以直接将 *.md文件内容粘贴上去
  • 知乎不支持类似$\sum_{i=1}^{n}$的LaTeX代码,使用公式时需在其公式编辑器内编辑;此时可将 *.md文件内容粘贴到mdnice这个排版工具中转化后,再贴到知乎上

本文即使用该方法写作

### Markdown 文件编辑器和处理工具 #### 在线编辑器 对于希望随时随地访问并快速开始编的用户,在线编辑器是一个不错的选择。这类工具通常集成于各种在线平台之中,如简书、乎、博客园、掘金、优快云等[^1]。它们允许用户无需安装任何额外软件就能创建和修改Markdown文档。 #### 独立软件 如果偏好本地操作而不依赖网络连接,则可以选择独立的桌面应用程序来管理个人项目中的Markdown文件。典型代表有Typora与MarkdownPad,这两者均提供了丰富的特性和友好的界面设计,使得撰过程更为流畅高效。 #### 笔记类应用 当需求不仅限于简单的文本创作时,集成了更多高级特性的笔记型程序便显得尤为重要。像思源笔记、Notion、Wolai、印象笔记、Joplin、MWeb 和 Vnote这样的解决方案不仅能完成基础的任务,还能实现跨平台同步、多媒体资源管理和复杂结构化数据存储等功能。 #### 插件形式扩展现有IDE/文本编辑器能力 为了满足程序员群体的需求,还有专门针对开发人员打造的插件类产品可供选用。比如Visual Studio Code (VSCode) 或 Sublime Text 中就存在大量优质的第三方扩展包可以帮助提升工作效率;而 EpicEditor 则是一款专注于提供强大API接口以便定制化的JavaScript库,适用于那些想要在其网站内部署专属编辑区域的技术团队[^2]。 #### 特殊用途编辑器实例分析 StackEdit作为一个基于浏览器运行的应用程序,特别适合追求简洁易用同时又不失灵活性的人士。该产品内置了多种实用特性——包括但不限于实时渲染视图切换、GFM语法兼容性以及多样的辅助标记选项(如表情符号解析),从而极大地增强了用户体验感[^3]。 ```python # Python 示例:读取 .md 文件内容 with open('example.md', 'r') as file: content = file.read() print(content) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值