前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >「R」使用Rmarkdown进行博文写作

「R」使用Rmarkdown进行博文写作

作者头像
王诗翔呀
发布2020-07-06 17:15:08
9040
发布2020-07-06 17:15:08
举报
文章被收录于专栏:优雅R

我实际做的事情就是写了两个R的函数,可以通过调用的方式创建Rmarkdown文档,并利用knitr包的knit函数将其转换为markdown文档。

需要文档代已经提交到Gist上面,可以 点击查看和下载https://gist.github.com/ShixiangWang/197cbe60c6fa096888b701af72511740。

第一步

创建一个Rmarkdown文档模板,这样我们可以非常方便地在每次写新文章时生成YAML头信息。

其内容如下,简单设定标题、作者、日期、目录、标签,你可以根据自己情进行更改,只要符合头信息规范即可:

代码语言:javascript
复制
---
title: "Put your title here"
author: 王诗翔
date: "2018-02-06 12:36:48"
top: false
categories: Linux杂烩
tags:
    - Linux
---

我们将它保存为template.Rmd文件(Rmarkdown文件一般以.Rmd或者.rmd结尾)。

第二步

将下面两个函数保存到一个R文件(以.R结尾)中:

代码语言:javascript
复制
################
## 用rmd写博客 ##
################

# 作者:王诗翔
# 更新日期:2018-02-05


#>>>>>> new_rmd_post 函数 <<<<<<<<<<
# 写好模板文档后,你可以用这个函数来创建Rmarkdown文档
# 参数说明:
# post_name:     博文名(最好英文,显示不会乱码),比如我写这篇博文用的是
#                how-to-write-rmd-documents-in-hexo-system
#                意思不一定要对,只要能跟其他博文名字有区分就行了
# template_name: 模板名,起template.Rmd最好,因为每次写文章都会用到,
#                这样你创建的时候不用每次都指定模板的名字
# template_path: 模板文档的路径,默认当前工作路径
# post_path:     你想把生成的文档放在哪个路径,默认当前工作路径
new_rmd_post <- function(post_name=NULL,template_name="template.Rmd",
                         template_path=getwd(), post_path=getwd()){
    if(is.null(post_name)){
        stop("A post name must be given!")
    }

    input_file   <- paste(template_path,template_name, sep="/")
    current_time <- Sys.Date()
    out_file     <- paste0(current_time, "-",post_name,".Rmd")
    fl_content   <- readLines(input_file)
    writeLines(fl_content, out_file)
    print("New Rmarkdown post creat successfully!")
}

#>>>>> new_md_post 函数 <<<<<<<<<<
# 你可以用这个函数来将Rmd文档转换为markdown文档
# 需要安装knitr包,命令为 install.packages("knitr")
# 参数说明:
# post_name: 文章文档名,推荐使用 年-月-日-英文名 的方式
# template_name: 模板名,你需要转换的Rmd文档
# template_path: 模板文档的路径,默认当前工作路径
# post_path:     你想把生成的文档放在哪个路径,默认当前工作路径
# time_tag:      时间标签,如果你转换的文档没有年-月-日这种标记,
#                将time_tag设定为TRUE会自动在名字前加上
new_md_post <- function(post_name=NULL,template_name="template.Rmd",template_path=getwd(),
                        post_path=getwd(),time_tag=FALSE){

    if(is.null(post_name)){
        post_name <- gsub(pattern = "^(.*)\\.[Rr]md$", "\\1", x = template_name)
    }

    input_file   <- paste(template_path,template_name, sep="/")
    # retrieve system date
    if(time_tag){
        current_time <- Sys.Date()
        out_file     <- paste0(post_path, "/", current_time, "-",post_name,".md")
    }else{
        out_file     <- paste0(post_path, "/", post_name,".md")
    }

    knitr::knit(input = input_file, output = out_file)
    print("New markdown post creat successfully!")
}

我把它保存为new_post.R,上述我进行了比较详细的注释,请在使用之前仔细阅读一下。

使用

我以现在以Rmarkdown写的这篇文章为例,简单讲一下使用。

我推荐在与你markdown博文目录同级创建一个_rmd目录,你可以将该目录设为一个项目目录,专门用来写rmarkdown文档。

或者你每次用setwd()函数设定工作目录。

将前两步创建的两个文件扔到该目录。运行R文件:

代码语言:javascript
复制
source("./new_post.R")

这样就能在R控制台调用里面的两个函数了。

创建一个Rmarkdown文档:

代码语言:javascript
复制
> new_rmd_post("how-to-write-rmd-documents-in-hexo-system")
[1] "New Rmarkdown post creat successfully!"

创建的文档名会自动添加年-月-日和后缀。

然后你就可以开始写博客了,写好后将Rmarkdown转换为markdown文档:

代码语言:javascript
复制
> new_md_post(template_name = "2018-02-05-how-to-write-rmd-documents-in-hexo-system.Rmd", post_path = "../_posts")


processing file: /home/wsx/blog/source/_rmd/2018-02-05-how-to-write-rmd-documents-in-hexo-system.Rmd
  |.................................................................| 100%
   inline R code fragments


output file: ../_posts/2018-02-05-how-to-write-rmd-documents-in-hexo-system.md

[1] "New markdown post creat successfully!"

细心的娃娃可以感觉到我单独创建_rmd目录并将其设为工作目录的好处:需要键入函数的参数非常少。特别是你固定你自己的写法之后,你将两个函数中的目录路径默认参数全部对应上,再使用RTAB键补全,运行命令简直秒秒钟,专心写文章就好啦。

彩蛋

如果你读到这里,说明你对这方面的知识还是比较感兴趣的,这里我不妨送一个彩蛋。上面的代码是我一年半之前所写,里面有不少值得优化的地方,比如:能不能在运行后编辑器自动打开?这在我博客仓库中是有的。我的中文博客地址在 https://shixiangwang.github.io/home/cn/,你能找到我现在写博文用的函数源代码吗?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 优雅R 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第一步
  • 第二步
  • 使用
  • 彩蛋
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档