How can I use Emacs ESS mode with R markdown?

REmacsEssR Markdown

R Problem Overview


Is there a way to configure Emacs so that it recognizes (and allows execution of) R code chunks within R markdown (.Rmd) files similar to the way it recognizes code chunks in .Rnw (Sweave) or .org (org-mode) files?

R Solutions


Solution 1 - R

polymode is being developed which does/will allow you to write markdown with R chunks (for processing with knitr).

Instructions for setting up polymode+rmarkdown are in the README

It is not yet done, but is progressing. See also this discussion on the ess-help mailing list (gmane archive|mailing list archive)


Update: polymode has been released on MELPA, simplifying the installation process by using emacs' existing package mechanism. See the announcement on the ESS mailing list here.

Solution 2 - R

Download the zip for polymode from github.com/vitoshka/polymode or, if you are a "git guy", you might use:

git clone https://github.com/vitoshka/polymode.git

Add this function to your Emacs init file:

(defun rmd-mode ()
  "ESS Markdown mode for rmd files"
  (interactive)
  (setq load-path 
 	(append (list "path/to/polymode/" "path/to/polymode/modes/")
 		load-path))
  (require 'poly-R)
  (require 'poly-markdown)     
  (poly-markdown+r-mode))

Now, if you already have ESS installed, just open your rmd file and type Meta-X rmd-mode and watch the beauty of Emacs.

Update for MELPA users

polymode from MELPA uses a flat file structure. When you install from an Emacs repository via M-x list-packages or like facilities, you get your package files straight where they ought to, i.e.: (expand-file-name "~/.emacs.d/elpa"), therefore do comment the above load-path code:

;;  (setq load-path 
;;     	(append (list "path/to/polymode/" "path/to/polymode/modes/")
;;     		load-path))

Solution 3 - R

The other answers are rather outdated, and polymode now provides a specialized package for working with .Rmd files. Simply use the poly-R package from MELPA which has its source here on Github.

The following may be added to your init.el or where-ever you use use-package:

(use-package poly-R
  :ensure t
  :pin melpa-stable)

For a more detailed use-case involving modifying the default keymaps see this configuration. The documentation describes the default keymaps.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionDavid LeBauerView Question on Stackoverflow
Solution 1 - RBrian DiggsView Answer on Stackoverflow
Solution 2 - RantonioView Answer on Stackoverflow
Solution 3 - RHaoZekeView Answer on Stackoverflow