Ghost is a simple, powerful publishing platform that allows you to share your stories with the world. Ghost is a kickstarter funded project which is growing rapidly. The source from Ghost is available to run on your own server, different hosted alternatives exists as well.
While Ghost is great at writing and publishing content, there is /was no easy way to integrate code, examples and grpahs from R into blogposts. The RGhost package and its shiny implementation aims to help R users create an easy workflow from idea, to analysis to publising content.
Ghost is under heavy development and the team is pushing out new features an a rapid pace. This is also true for the Ghost api. As of now there is no official release of the api. The documentation is scarce but can be found on the forums and here. I'll make a best effort to keep the package up to date with the developements as they are rolled out.
The current implementation is based on Ghost version 0.5.7.
The current package is an clear alpha, the following features need to be implemented improved:
Please use the devtools package to install the latest version from RGhost devtools::install_github(goodmarketing/RGhost)
.
NOTE
RGhost has only been tested with a self-hosted version. Technically it should work with the hosted versions of Ghost.
Please see the help documentation in the package itself.
The RGhost shiny application is a web application which provides an easy way to combine markdown & R code and publish to Ghost. RGhost shiny application is based on editR by Simon Garnier.
editR is a basic Rmarkdown editor with instant previewing of your document. It allows you to create and edit Rmarkdown documents while instantly previewing the result of your writing and coding. It also allows you to render your Rmarkdown file in any format permitted by the rmarkdown R package
Before you install the applicatin you can give it a try on shinyapps. In order to run the RGhost shiny application the following packages are required:
To launch the application load the RGhost library library (RGhost)
and run the following command
library (RGhost)
launch_rghost_app()
RGhost extends editR by the ability to post, update and delete content. The most prominent features of the Ghost blogging platform are implemented. Users can create status pages, edit drafts, mark a post as featured, add and remove tags and provide a cover image for a blog post.
Implementation of the Ghost feature may depend on the chosen theme. For example how the image property used per post depends on the ghost theme used.
Login requires the Ghost admin username (email) and password. Using the shinyStore package it is possible to save the credentials for later use. Also supply the url (inc http://) to the shiny application.
You are now ready to interact with the Ghost blogging platform.
Note The current implementation is not secure and your credentials are send over http and stored as is. Future feature will support hashed passwords for storage and Oauth 2.0 implementation which uses SSL/TSL.
Thanks to editR you can work with files (currently there is now way to create a new file from the application.) You can open and save existing Rmd files. To view your file in HTML format hit the render button. A new window will open showing you a html version of your content.
NOTE: On shinyapps.io the home directory is a relative directory (posts), which is publicly available.
Write your content in (R) markdown and use the left hand options to set the properties of the post.
Most field are self explanatory, but a number of notes
Url: you can determine the url of the post. Ghost accepts any type of string and converts it to a valid url.
Image: for the image property to work you need to full link to an online image. Currently uploading is not supported (yet).
Tags: you can select multiple tags.
Feature : depending on the Ghost theme applied the feature property is used to provide a post a prominent position on the homepage.
NOTE
The application stores an Rmd file the first time you publish a post in the 'posts' directory. As the RMarkdown is parsed by knitr and then Ghost the original r code you write will be converted. Storing an Rmd file allows for retreival of the R code.
You can use regular markdown to style your blogposts, the preview allows you to see the results immediatly.Ghost will convert the markdown to proper HTML for you, once a blogpost is published or updated. You can also incorporate html tags.
The best feature of the application is the ability to mix content with R code. Check out the R Markdown documentation for a run down of the possibilities.
Please note once content is converted from RMarkdown to Markdown, the original r code is converted in markdown and cannot be editted anymore.
A workaround is to set the echo property on the r code chunk to true. This option will include the r code in a code box and the r code will be included in your blogpost. I'd recommend using this option when you are editting draft posts, depending on your preference you may or may not want to include the source code.
Another method to preserve the r code is to open an Rmd file in the editor and save the file once you are done, and only post it to ghost once you are completly done with the post.
A couple of highlights
An important feature of any data driven blogpost are charts. By added chart to an R chunch you can now easily integrate charts into your blogposts. I'd recommend one of two ways to do this
Create any chart you want in an r chunk, you can use the r chunk options to control size, code preview etc.. It will be displayed in the preview window, so you can review it in real time. Using one of the awesome features of knitr, any chart /figure will be automatically uploaded to imgur. See knitr for more information and an img tag including url is added to the markdown code. Ghost also allows image uploads, a custom hook to the knitr package could be created to upload images to your Ghost account. This feature is currently on the to do list. Here is an example using ggthemes.
# Load libraries
library("ggthemes")
(qplot(hp, mpg, data = subset(mtcars, cyl != 5), geom = "point", color = factor(cyl)) +
geom_smooth(method = "lm", se = FALSE) + scale_color_fivethirtyeight() +
theme_fivethirtyeight())
Since your readers will be viewing your content online you can take advantage of interactive graphing libraries such as the great rCharts and rMaps by [Ramnath Vaidyanathan] (https://github.com/ramnathv).
mr Vaidyanathan defines two options for integrating rCharts in R Markdown. I found that using an Iframe to display the chart works best with Ghost. Here is an example using highcharts. Please note that the chunck options need to be set as follows, for the chart to render properly:comment = NA, results = "asis", tidy = F
library(rCharts)
h1 <- Highcharts$new()
h1$chart(type = "spline")
h1$series(data = c(1, 3, 2, 4, 5, 4, 6, 2, 3, 5, NA), dashStyle = "longdash")
h1$series(data = c(NA, 4, 1, 3, 4, 2, 9, 1, 2, 3, 4), dashStyle = "shortdot")
h1$legend(symbolWidth = 80)
h1$set(width = 800)
h1$show('iframesrc', cdn = TRUE)
iframe.rChart{ width: 100%; height: 400px;}
In a similar fashion you can create interactive maps using the rMaps package
library(rMaps)
map <- Leaflet$new()
map$setView(c(52.36, 4.90), zoom = 5)
map$tileLayer(provider = 'Stamen.Watercolor')
map$marker(c(52.36, 4.90), bindPopup = 'Hi. Welcome to Amsterdam')
map$set(width = 800)
map$show('iframesrc', cdn = TRUE)
iframe.rChart{ width: 100%; height: 400px;}
Currently Ghost does not support markdown tables. There are probably more than one ways around this, my current most convenient solution is xtable.
If you produce a table in a R chunck you can use the following to publish this to Ghost
a <- head(cars) #Your results
library(xtable) # Load xtable library
tab <- xtable(a) #xtable your results
# Styling table using css
print(tab, type="html",html.table.attributes='class:mytable') # print them to html. Ghost accepts standard html in markdown.
speed
dist
1
4.00
2.00
2
4.00
10.00
3
7.00
4.00
4
7.00
22.00
5
8.00
16.00
6
9.00
10.00
# Styling table using html properties
print(tab, type="html", html.table.attributes = list('border="0" bgcolor="#FFCC00" cellpadding="10"'))
speed
dist
1
4.00
2.00
2
4.00
10.00
3
7.00
4.00
4
7.00
22.00
5
8.00
16.00
6
9.00
10.00
TIP: if you use html.table.attributes and set the table class attribute you can style you output tables with CSS. Usually Ghost themes have a class for styling table, so if you set it to this class all you tables will be outputted in the same format.
In order to update an existing post you need to get them from ghost. Currently all posts (draft and published) will be loaded and a selectbox will be displayed.
You can type in the select field to find the post you are looking for.
Edit the post content and properties and hit update. Upon success a message will be displayed.
Select a post you want to delete and hit the Delete button. (Be careful deletion is permanent).
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.