2016-11-30 9 views
4

最小Rmarkdownドキュメントには、YAMLヘッダー、マークダウン構文、およびRコードチャンクがあります。 このような多言語ファイルを編集するには、Emacsエディタを使用していて、Rmdドキュメントが開かれているバッファはpolymodeです。RmdドキュメントからすべてのRチャンクを一度に実行

一般的なドキュメントには、複数のRチャンクがあります。 Rmdドキュメントの途中でRチャンクを書いたりデバッグしているときに、Rが内部で実行されているESSモードの2番目のバッファがあります.RmdからRコマンドを送信することで、以前のすべてのチャンクを再実行する必要があることがよくありますファイル(第1バッファ)をRコンソール(第2バッファ)に書き込む。

すべてのチャンクからすべてのコマンドを実行できる単一のコマンドはありますか?

another questionから、org-modeがこれを行うことができるようです。しかし、私の環境でそれを行うことは可能でしょうか?

答えて

3

あなたのRmarkdownにRソースコードしかなく、対話式で簡単に評価できるようにしたい場合は、knitrからspinsee here)の方が簡単かもしれません。

すべてのマークダウン/ Rmarkdown mumbo-jumboが通常のRコメント内に含まれているので、バッファを通常のソースコードのように扱うことができるので、私は(スピン)ソリューションを好む。しかし、以下は、ポリモードバッファ内のすべてのRコードチャンクを評価する必要があります(完全にテストされていない)。

(eval-when-compile 
    (require 'polymode-core) ;; SO format :(' 
    (defvar pm/chunkmode)) 
(declare-function pm-map-over-spans "polymode-core") 
(declare-function pm-narrow-to-span "polymode-core") 

(defun rmd-send-chunk() 
    "Send current R chunk to ess process." 
    (interactive) 
    (and (eq (oref pm/chunkmode :mode) 'r-mode) ;;' 
     (pm-with-narrowed-to-span nil 
     (goto-char (point-min)) 
     (forward-line) 
     (ess-eval-region (point) (point-max) nil nil 'R)))) ;;' 

(defun rmd-send-buffer (arg) 
    "Send all R code blocks in buffer to ess process. With prefix 
send regions above point." 
    (interactive "P") 
    (save-restriction 
    (widen) 
    (save-excursion 
     (pm-map-over-spans 
     'rmd-send-chunk (point-min) ;;' 
     ;; adjust this point to send prior regions 
     (if arg (point) (point-max)))))) 
+0

awesome ... !!カーソルがどこにあるかの上にチャンクだけを送る方法がありますか?つまり、Rmdバッファに10個のチャンクがあり、カーソルが5番目と6番目の間にあるとします。チャンク1〜5だけをESSバッファに送る方法はありますか? – tflutre

+0

ありがとう!私のような初心者にとっては、これを使う方法です:関数を '.el'ファイルに保存します。 'M-x load-file'を介してEmacsにロードしてください。 Rチャンクを含む '.Rmd'ファイルを' polymode'バッファに開きます。 'ESS'バッファを開きます。 'polymode'バッファの途中にカーソルを置きます。 'C-u M-x rmd-send-buffer'を実行してください。これはカーソルの上にあるすべてのRチャンクを 'polymode'バッファから' ESS'バッファに送ります。 – tflutre

関連する問題