How to Convert R Markdown to HTML? I.E., What Does "Knit HTML" Do in Rstudio 0.96

How to convert R Markdown to HTML? I.e., What does Knit HTML do in Rstudio 0.96?

Put Sys.sleep(30) in a chunk and you will see clearly what commands are called by RStudio. Basically they are

  1. library(knitr); knit() to get the markdown file;
  2. RStudio has internal functions to convert markdown to HTML;

The second step will be more transparent in the next version of the markdown package. Currently you can use knitr::knit2html('your_file.Rmd') to get a similar HTML file as RStudio gives you.


Update on 2019/09/17: The above answer applies to RStudio v0.96 (in the year 2012). Now R Markdown is compiled through rmarkdown::render(), which uses Pandoc instead of the retired R package markdown. See the post Relationship between R Markdown, Knitr, Pandoc, and Bookdown for more details.

embedding plots into html using knitr

Clicking Knit HTML in RStudio is (supposed to be) equivalent to knit2html() in knitr. You will indeed see a figure directory, but you can safely ignore it -- all your plots have been embedded in the HTML file by default. When you share the HTML file with your co-workers, you only need to pass the HTML file to them. To verify this, simply delete the figure directory and see if the plots are still in the HTML file.


Update on 2020/04/20: Please ignore the answer above. RStudio no longer calls knitr::knit2html(). See this post for an update: https://stackoverflow.com/a/10654295/559676

How to replicate Knit HTML in a command line?

The documentation tells us:

If you are not using RStudio then you simply need to call the rmarkdown::render function, for example:

rmarkdown::render("input.Rmd")

Note that in the case using the “Knit” button in RStudio the basic mechanism is the same (RStudio calls the rmarkdown::render function under the hood).

In essence, rmarkdown::render does a lot more setup than knitr::knit2html, although I don’t have an exhaustive list of all differences.

The most flexible way of rendering the output is, at any rate, to supply your own stylesheet to format the output according to your wishes.

Please note that you need to set up Pandoc manually to work with rmarkdown::render on the command line.


That said, here are two remarks that would improve the knitr::knit2hmtl output, and that are superior to using rmarkdown::render in my opinion:

  • To include the title, use a Markdown title tag, not a YAML tag:

    # My title
  • To format tables, don’t use the raw kable function. In fact, this is also true when using rmarkdown::render: the alignment of the table cells is completely off. Rmarkdown apparently uses centering as the default alignment but this option is almost never correct. Instead, you should left-align text and (generally) right-align numbers. As of this writing, Knitr cannot do this automatically (as far as I know) but it’s fairly easy to include a filter to do this for you:

    ```{r echo=FALSE}
    library(pander)

    # Use this option if you don’t want tables to be split
    panderOptions('table.split.table', Inf)

    # Auto-adjust the table column alignment depending on data type.
    alignment = function (...) UseMethod('alignment')
    alignment.default = function (...) 'left'
    alignment.integer = function (...) 'right'
    alignment.numeric = function (...) 'right'

    # Enable automatic table reformatting.
    opts_chunk$set(render = function (object, ...) {
    if (is.data.frame(object) ||
    is.matrix(object)) {
    # Replicate pander’s behaviour concerning row names
    rn = rownames(object)
    justify = c(if (is.null(rn) || length(rn) == 0 ||
    (rn == 1 : nrow(object))) NULL else 'left',
    sapply(object, alignment))
    pander(object, style = 'rmarkdown', justify = justify)
    }
    else if (isS4(object))
    show(object)
    else
    print(object)
    })
    ```

How to knit into HTML files from RStudio on a Mac?

You can use the below command for this:

textutil -convert html example.webarchive

But be warned that it creates all the files in the current directory, so if you have a lot of images, they will get placed there.

Hope this helps!



Related Topics



Leave a reply



Submit