# xの2乗を微分する
expr <- expression(x^2)
D(expr, "x")2 * x
2026年9月5日
Rには微分や積分を扱う関数が標準で備わっているのをご存知でしょうか。
統計解析に特化した言語であるRですが、実は数式処理のような機能も持っています。今回はその中の1つとして、Rで扱うことのできる微積分をご紹介したいと思います。
Rで微分を行うには D() 関数を、定積分を行うには integrate() 関数を使用します。順に見ていきましょう。
D() による記号微分まず、微分の例です。D() 関数は、与えられた数式を「記号的(Symbolic)」に微分し、その結果としての「式」を返します。
このように、具体的な数値を代入して計算するのではなく、数学的に微分した後の形式がそのまま返されます。微分の値が必要なときには、eval() で変数に値を代入します。
多変数関数の場合は、微分する変数を指定することでそれぞれについての偏微分を行うことができます。
integrate() による数値積分一方で、積分を行う integrate() 関数は、指定した範囲の定積分の「値」を求める数値積分を行います。
0.3333333 with absolute error < 3.7e-15
2 with absolute error < 2.2e-14
[1] 2
[1] 2.220446e-14
D() が「式」を返すのに対し、integrate() は近似計算によって導き出された「数値」を返すという違いがあります。近似計算なので、絶対誤差の推定値が示されることが気になってしまう方もいらっしゃると思いますが、このおかげで1 / log(x)のような不定積分が難しい関数の定積分も計算できるのは有用ですね。
統計解析のための言語であるRに、なぜこのような数式処理的な機能があるのでしょうか。よく考えれば、統計的な演算を行うためにはむしろ必要不可欠なものだと分かります。
例えば、統計学において確率密度関数を定積分すればその範囲の確率を求めることができます。dnorm() で得られる正規分布の密度を積分してみると、次のようになります。
よく話題として出てくる「2シグマの範囲には約95.4%が含まれる」ということがRで確認できました。statsパッケージにはこのような統計的な演算を必要とする関数が多く含まれているので、その基礎的な部品として微積分が用意されているのではないかと個人的に理解しています。その機能をおまけで使えるようにしてあるのではないでしょうか。つまり、「数式処理ソフトとしての機能」というよりは、「統計計算を実行するためのインフラ」としての役割が大きいのではないかと感じます。
Rで微積分を行う方法についてご紹介しました。個人的な話ですが、私が高校生の頃にMathematicaという高級な数式処理ソフトがあることを知り、当時習っていた微積分が計算できてしまうと聞いて「手が出せないがすごい機能を持つソフトウェアなんだな」といった憧れのような思いを抱いた記憶があります。それが今、オープンソースであるRで(限定的ではありますが)同様の操作が実行できることに、ある種の感動を覚えます。
同じような感覚を持たれた方は、ぜひ D() や integrate() を試してみてください。