从 Rmd 文档一次执行所有 R 块
execute all R chunks at once from an Rmd document
一个最小的 Rmarkdown 文档有一个 YAML header、markdown 语法和 R 代码块。
要编辑这样一个 multi-language 文件,我使用的是 Emacs 编辑器,打开 Rmd 文档的缓冲区在 polymode.
典型的文档有多个 R 块。当我在 Rmd 文档中间 writing/debugging 一个 R chunk 时,我在 ESS 模式下有第二个缓冲区,里面有 R 运行 ,我经常要 re-execute 所有前面的 chunk通过将 R 命令从 Rmd 文件(第一个缓冲区)发送到 R 控制台(第二个缓冲区)。
是否有一个命令允许执行来自所有块的所有命令?
从看来,org-mode好像可以做到这一点。但是在我的设置中可以这样做吗?
如果您的 Rmarkdown 中只有 R 源代码,并且希望能够轻松地对其进行交互式评估,knitr
中的 spin
可能更容易 (see here)。
我更喜欢那个(自旋)解决方案,因为所有 markdown/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))))))
如果使用 Poly-Markdown+R,评估 Rmarkdown 文档中所有 R 代码片段的命令是 M-n v b
。
一个最小的 Rmarkdown 文档有一个 YAML header、markdown 语法和 R 代码块。 要编辑这样一个 multi-language 文件,我使用的是 Emacs 编辑器,打开 Rmd 文档的缓冲区在 polymode.
典型的文档有多个 R 块。当我在 Rmd 文档中间 writing/debugging 一个 R chunk 时,我在 ESS 模式下有第二个缓冲区,里面有 R 运行 ,我经常要 re-execute 所有前面的 chunk通过将 R 命令从 Rmd 文件(第一个缓冲区)发送到 R 控制台(第二个缓冲区)。
是否有一个命令允许执行来自所有块的所有命令?
从
如果您的 Rmarkdown 中只有 R 源代码,并且希望能够轻松地对其进行交互式评估,knitr
中的 spin
可能更容易 (see here)。
我更喜欢那个(自旋)解决方案,因为所有 markdown/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))))))
如果使用 Poly-Markdown+R,评估 Rmarkdown 文档中所有 R 代码片段的命令是 M-n v b
。