Site icon R-bloggers

(Semi-)automating the R markdown to blogger workflow

[This article was first published on metvurst, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

In his recent post 100 most read R posts for 2012 (stats from R-bloggers) – big data, visualization, data manipulation, and other languages Tal Galili – the guy behind R-Bloggers – presents his wishlist for 2013. Among other things he states

“The next step will be to have a “publish to your WordPress/blogger” button right from the RStudio console – allowing for the smoothest R blogging experience one could dream of.

I hope we’ll see this as early as possible in 2013.”

Given that I had some troubles myself recently with finding a convenient way of creating post for this blog (a blogspot site) and that I didn't want to wait until RStudio may integrate such functionality, I decided to come up with my own work around for the time being.

But let's start from the beginning:

What I want:

What I don't want:

Why I want this:

The solution (as of now) is as follows (at least for me):

Yihui Xie has produced a SyntaxHighlighter Brush for the R Language which can be used for highlighting R code in blog posts.

In order to get the SyntaxHighlighter working on your blog, simply follow this tutorial at thebiobucket*.

However, the SyntaxHighlighter by Alex Gorbatchev, and subsequently also Yihui's brush for R, works a little different from the knitr code highlighting implementation. Basically, a chunk of code created with knitr is prepended by this little bit of html code:

<pre><code class="r">

whereas SyntaxHighlighter requires the following format for it to work:

<pre class="brush: r">

In order to automate the process of adjusting the brush definition needed for code highlighting using the SyntaxHighlighter brush I created the follwing function:

rmd2blogger <- function(rmdfile) {

  stopifnot(require(knitr))

  ## knit rmdfile to <body> - only html
  knit2html(rmdfile, fragment.only = TRUE)

  ## read knitted html file
  htm.name <- gsub(".Rmd", ".html", rmdfile)
  tmp <- readLines(htm.name)

  ## substitue important parts
  tmp <- gsub("<pre><code class=\"r\">", "<pre class=\"brush: r\">", tmp)
  tmp <- gsub("</code></pre>", "</pre>", tmp)

  ## write with .blg file ending
  writeLines(tmp, paste(htm.name, ".blg", sep =""))

}

This function has two important components to it:

  1. it uses knitr's knit2html with fragment.only set to TRUE, which means your only creating the <body> part of the html.
  2. it produces a .html.blg file in the path where the .Rmd is located where all syntax highlighting brushes are formatted to work with Yihui's R brush

To use it, simply provide the path to the .Rmd file you want to publish on your blogspot.

rmd2blogger("someRmdFile.Rmd")

Now, you can simply open the .html.blg file in a text editor and copy the complete contents into the html editor for a new post on your blogger site and the code R should look like the one above.

In case you find any bugs, please let me know.

sessionInfo()

## R version 2.15.2 (2012-10-26)
## Platform: x86_64-pc-linux-gnu (64-bit)
## 
## locale:
##  [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
##  [5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
##  [7] LC_PAPER=C                 LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] parallel  grid      stats     graphics  grDevices utils     datasets 
## [8] methods   base     
## 
## other attached packages:
## [1] rgdal_0.7-25        raster_1.9-92       gridBase_0.4-6     
## [4] latticeExtra_0.6-19 lattice_0.20-10     RColorBrewer_1.0-5 
## [7] sp_0.9-99           knitr_0.9          
## 
## loaded via a namespace (and not attached):
## [1] digest_0.6.0   evaluate_0.4.3 formatR_0.7    markdown_0.5.3
## [5] plyr_1.7.1     stringr_0.6    tools_2.15.2

To leave a comment for the author, please follow the link and comment on their blog: metvurst.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.