Community研究&データ分析github.com

pwquint24/org-babel-r

データサイエンス、統計計算、グラフィックスデバイス、ESS連携、およびOrg Babelを使用した再現可能な研究のための完全ガイドです。

org-babel-r とは?

このスキルは、EmacsのOrgモードにおけるOrg Babelを使用して、R言語のコードブロックを実行・管理するための包括的なガイドを提供します。ESS(Emacs Speaks Statistics)と統合することで、インタラクティブな実行、セッション間での状態共有、出版品質のグラフィックス生成、構造化テーブル出力が可能になります。設定手順、セッション管理、結果処理(テーブルや出力グラフィックス)、特にggplot2やLatticeなどのグリッドグラフィックスの注意点、高DPIプロットやLaTeX出力などの高度な設定まで詳しく解説されています。このガイドは、再現可能な研究やデータ分析ワークフローをOrgモード内で完結させたい研究者やデータサイエンティストにとって非常に有用です。

対応~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/pwquint24/org-babel-agent-skills/tree/HEAD/skills/org-babel-r

Installed? Explore more 研究&データ分析 skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

Org Babel における R ソースコードブロック

Org Babel で R を使用すると、統計計算、データ分析、グラフィックス生成、再現可能な研究論文のための環境が提供されます。Org Mode の R コードブロックは ESS(Emacs Speaks Statistics) と統合され、インタラクティブな実行、マルチブロック間の状態共有、出版品質のグラフィックス、構造化テーブル出力をサポートします。


1. セットアップと環境設定

1.1 前提条件

  1. 動作する R のインストール(CRAN バイナリまたはソースからのビルド)。
  2. MELPA からインストールした ESS(Emacs Speaks Statistics)(セッションベースの評価とステッピングに必要)。
  3. org-babel-load-languages で ob-R を有効化。

1.2 Emacs 設定テンプレート

以下を init.el に追加します:

;; 1. MELPA の設定
(require 'package)
(add-to-list 'package-archives '("melpa" . "https://melpa.org/packages/") t)
(package-initialize)

;; 2. ESS のロードを確認
(unless (package-installed-p 'ess)
  (package-refresh-contents)
  (package-install 'ess))
(require 'ess-r-mode)

;; 3. Org Babel で R を有効化
(org-babel-do-load-languages
 'org-babel-load-languages
 '((emacs-lisp . t)
   (R          . t)))

;; 4. オプション:インタラクティブなセキュリティ確認プロンプトなしでブロックを実行
(setq org-confirm-babel-evaluate nil)

1.3 Windows 固有の設定

Microsoft Windows で、Emacs が The system cannot find the path specified と報告する場合、R バイナリのパス(デフォルトの Babel フラグ --slave --no-save を含む)を明示的に設定します:

;; 64ビット Windows の場合:
(setq org-babel-R-command "C:/Progra~1/R/R-4.3.0/bin/x64/R --slave --no-save")

注: :session を使用する場合、org-babel-R-command は無視され、代わりに ESS の inferior-ess-R-program が使用されます。


2. 実行モード:セッションと ESS 統合

2.1 非セッション(:session none、デフォルト)

個別のバッチ R プロセス(R --slave --no-save)で実行されます。クリーンで分離されており、副作用はありませんが、毎回すべてのライブラリとデータのロードを再実行します。

2.2 インタラクティブセッション(:session <名前>)

内部の ESS R プロセス(*<名前>*)内で実行されます。

  • データセット、ライブラリ、モデル、変数は、同じセッション名を共有する複数のブロック間で永続化されます。
  • インタラクティブな検査、デバッグ、高速な反復ワークフローが可能になります。
#+PROPERTY: header-args:R :session *r-analysis* :results value :exports both

2.3 ESS を使用したインタラクティブなデバッグとステッピング

R ブロックのトラブルシューティング時:

  1. セッションに切り替え: R ブロック内にポイントがある状態で、M-<down>(org-babel-pop-to-session)または C-c C-z(ess-switch-to-end-of-ESS)を押して R REPL バッファにジャンプします。
  2. 環境を検査: ls()、str(x)、dim(x)、summary(x)、head(x) を使用します。
  3. 1行ずつステップ実行:
    • Org ブロック内で C-c '(org-edit-special)を押して、専用の ESS R バッファに入ります。
    • C-c C-n(ess-eval-line-and-step)または C-c C-c(ess-eval-region-or-function-or-paragraph)を使用して、ライブの R プロセスでコードを 1 行ずつステップ実行します。
    • C-c ' を押して Org ドキュメントに戻ります。

3. 結果の処理:データフレーム、値、テーブル

3.1 表形式データの返却(:results value table)

データフレーム、行列、ベクトルを返す場合、Org Babel はそれらを直接ネイティブの Org テーブルに変換します:

#+NAME: mtcars_summary
#+BEGIN_SRC R :session *r* :results value table :colnames yes
  aggregate(mpg ~ cyl + gear, data=mtcars, FUN=mean)
#+END_SRC

#+RESULTS: mtcars_summary
| cyl | gear |              mpg |
|-----+------+------------------|
|   4 |    3 |            21.5  |
|   6 |    3 | 19.7500000000000 |
|   8 |    3 | 15.0500000000000 |
|   4 |    4 |            26.92 |
|   6 |    4 |            19.75 |
|   4 |    5 |             28.2 |
|   6 |    5 |             19.7 |
|   8 |    5 |            15.4  |
  • データフレームを扱う場合は、列名を正しく保持して表示するために、常に :colnames yes を追加します。
  • R では、最後に評価された式の値が自動的に返されます(明示的な return() は不要です)。

3.2 コンソール出力のキャプチャ(:results output)

:results output を使用して、標準出力、モデルの表示、要約統計量をキャプチャします:

#+BEGIN_SRC R :session *r* :results output
  fit <- lm(mpg ~ wt + hp, data=mtcars)
  summary(fit)$coefficients
#+END_SRC

#+RESULTS:
:               Estimate Std. Error   t value     Pr(>|t|)
: (Intercept) 37.2272694 1.59878754 23.284688 2.565459e-20
: wt          -3.8778307 0.63273349 -6.128695 1.119647e-06
: hp          -0.0317729 0.00902971 -3.518708 1.451229e-03

4. グラフィックスと可視化

4.1 基本グラフィックスのルール(Org $\ge$ 9.3)

グラフィックスを生成するには、:results に file と graphics の両方 を指定し、さらに :file で出力ファイル名を指定します:

:results graphics file :file <パス.拡張子>

サポートされているファイル拡張子と対応する R デバイス:

  • ベクター:.pdf、.svg、.ps / .postscript、.tex(TikZ)
  • ラスター:.png、.jpg / .jpeg、.tiff、.bmp
  • デフォルトのフォールバック:.png
#+BEGIN_SRC R :file figures/base_plot.png :results graphics file :width 600 :height 400 :res 120
  plot(mtcars$wt, mtcars$mpg, pch=19, col="darkblue",
       xlab="Weight (1000 lbs)", ylab="Miles per Gallon",
       main="Fuel Economy")
  abline(lm(mpg ~ wt, data=mtcars), col="red", lwd=2)
#+END_SRC

#+RESULTS:
[[file:figures/base_plot.png]]

4.2 重要な ggplot2 / Lattice 「グリッドグラフィックス」のルール

落とし穴: Lattice(xyplot)と ggplot2 の関数はグラフィカル オブジェクト を返します。非インタラクティブなバッチ評価(非セッション)では、オブジェクトを表示せずに返すと、空または壊れたグラフィックスファイルが作成されます!

Org Babel で ggplot2 / Lattice プロットをレンダリングするには、3つの信頼できる方法 があります:

方法 A:明示的な print()(非セッション推奨)

#+BEGIN_SRC R :file figures/dist.png :results graphics file
  library(ggplot2)
  p <- ggplot(mtcars, aes(x=mpg)) + geom_histogram(bins=10, fill="steelblue")
  print(p)  # 明示的な print() がグラフィックスデバイスのレンダリングをトリガー
#+END_SRC

方法 B::session を使用(インタラクティブに自動表示)

#+BEGIN_SRC R :session *r* :file figures/dist.png :results graphics file
  library(ggplot2)
  ggplot(mtcars, aes(x=mpg)) + geom_histogram(bins=10, fill="steelblue")
#+END_SRC

方法 C::results output graphics file を使用

#+BEGIN_SRC R :file figures/dist.png :results output graphics file
  library(lattice)
  xyplot(mpg ~ wt, data=mtcars)
#+END_SRC

5. R グラフィックスデバイスのヘッダー引数

Org Babel は、R グラフィックスデバイス(png()、pdf()、svg() など)のパラメーターに直接マッピングするファーストクラスのヘッダー引数を提供します:

ヘッダー引数デフォルト値説明と使用可能な値
:width7 (in) / 480 (px)デバイスの幅。
:height7 (in) / 480 (px)デバイスの高さ。
:unitspx(ラスター)、in(PDF)単位:"px"、"in"、"cm"、"mm"。
:res721インチあたりのピクセル数(DPI)による公称解像度。(鮮明なラスタープロットには不可欠:150〜300を使用)。
:bg"white"背景色(例:"transparent"、"#f7f7f7")。
:fg"black"前景色。
:pointsize12テキストレンダリングの基本ポイントサイズ。
:family"Helvetica"フォントファミリー("Helvetica"、"Times"、"Palatino"、"Courier"、"sans"、"serif"、"mono")。
:quality75JPEG 品質パーセンテージ(1〜100)。
:typeプラットフォームデフォルトビットマップレンダラー:"cairo"、"quartz"、または "Xlib"。
:paper"special"PDF 用紙サイズ:"special"、"a4"、"letter"、"a4r" など。
:R-dev-argsnilデバイス関数に直接渡される追加の R デバイス引数の raw 文字列。

例:カスタム寸法の高 DPI Cairo SVG/PNG

#+NAME: custom_styled_plot
#+HEADER: :width 8 :height 5 :units in :res 300 :type cairo
#+HEADER: :R-dev-args bg="#fcfcfc"
#+BEGIN_SRC R :session *r* :file figures/styled_plot.png :results graphics file
  library(ggplot2)
  ggplot(diamonds[1:1000, ], aes(x=carat, y=price, color=cut)) +
    geom_point(alpha=0.6) +
    theme_minimal(base_family="sans") +
    labs(title="Diamond Prices by Carat and Cut")
#+END_SRC

5.3 ドキュメントフォントに合わせる TikZ LaTeX グラフィックス

軸ラベルや数式注釈がドキュメントと同じ LaTeX フォントを正確に共有するプロットを生成するには:

#+BEGIN_SRC R :file figures/model_plot.tex :results graphics file
  plot(1:10, type="b", main="\\textbf{TikZ Plot with Math: } $\\int_0^1 x^2 dx$")
#+END_SRC

LaTeX/PDF にエクスポートすると、.tex ファイルは \input{figures/model_plot.tex} によってネイティブにインクルードされます!


6. 高度なフォーマット出力(ASCII、Org、LaTeX)

6.1 ascii パッケージを使用したフォーマット済み Org 出力

R パッケージ ascii は、複雑な非表形式の R オブジェクト(describe()、table()、summary() など)をネイティブの Org 構文に変換できます:

#+BEGIN_SRC R :session *r* :results output org
  library(ascii)
  options(asciiType = "org")
  tab <- table(mtcars$cyl, mtcars$gear)
  ascii(tab, caption="Cylinders vs Forward Gears")
#+END_SRC

#+RESULTS:
#+BEGIN_ORG
#+CAPTION: Cylinders vs Forward Gears
|   | 3  | 4 | 5 |
|---+----+---+---|
| 4 | 1  | 8 | 2 |
| 6 | 2  | 4 | 1 |
| 8 | 12 | 0 | 2 |
#+END_ORG

6.2 LaTeX エクスポート用の xtable を使用した出版用テーブル

LaTeX エクスポートを介して PDF を対象とするドキュメントの場合、:results output latex と共に xtable を使用します:

#+BEGIN_SRC R :results output latex :exports results
  library(xtable)
  fit <- lm(mpg ~ wt + hp, data=mtcars)
  print(xtable(summary(fit), caption="Regression Estimates", label="tab:reg"),
        comment=FALSE)
#+END_SRC

#+RESULTS:
#+BEGIN_LaTeX
\begin{table}[ht]
\centering
\begin{tabular}{rrrrr}
  \hline
 & Estimate & Std. Error & t value & Pr($>$$|$t$|$) \\ 
  \hline
(Intercept) & 37.2273 & 1.5988 & 23.28 & 0.0000 \\ 
  wt & -3.8778 & 0.6327 & -6.13 & 0.0000 \\ 
  hp & -0.0318 & 0.0090 & -3.52 & 0.0015 \\ 
   \hline
\end{tabular}
\caption{Regression Estimates} 
\label{tab:reg}
\end{table}
#+END_LaTeX

7. トラブルシューティングとよくある落とし穴

問題原因解決策
ggplot2 や lattice が空白または破損した画像を生成する非セッションモードで返されたグラフィックスオブジェクトが明示的に表示されなかったプロットを print(p) でラップするか、:session に切り替えるか、:results output graphics file に output を追加する。
グラフィックスファイルは生成されるがリンクが挿入されないfile または graphics キーワードが欠落しているヘッダーに :results graphics file(Org $\ge$ 9.3 では両方の単語が必要)があることを確認する。
The system cannot find the path specified(Windows)R 実行可能ファイルが PATH またはカスタムの場所に見つからないinit.el で (setq org-babel-R-command "path/to/R --slave --no-save") を設定する。
R データフレームで列が 0 行に変換されるテーブルの列ヘッダーが観測データとして扱われるブロックヘッダー引数に :colnames yes を追加する。
セッション内の R が大規模計算でハングするブロックが Emacs プロセスをブロックしている内部の ESS バッファ(C-c C-z)に切り替えて進行状況を監視するか、C-c C-c で中断する。
エクスポートされたドキュメントでプロットがぼやけるデフォルトのラスター DPI(72)が低すぎる:res 300 を追加し、それに応じて :width と :height を調整する。

Individual skills in this repo

This repo contains 4 individual skills — each has its own dedicated page.

関連スキル