制御構造・サブルーチン
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/06/03 23:39 UTC 版)
for, if, while, repeat, switch, break といった構造化構文がある。自前の関数(手続き)を定義することができ、自前の二項演算子さえも定義することができる。関数は function 関数で生成する。次に、階乗を計算する自前の関数を生成し、toyfactorial として呼出しできるようにする例を示す。 toyfactorial <- function (n) {if (n <= 0) return(NA)f <- function(i) {if (i == 1) return(1) else return(i * Recall(i-1))}return(f(n))} 上記は実用的ではないかもしれないが、関数のネスティング・再帰呼び出し・スコープの例として挙げた。R言語ではPascalやModula-2のように関数のネスティングが可能である。この例では、関数内部でさらに局所的な関数を生成し、f として参照している。スコープもPascal等と同様、辞書式で、関数 f の中ではその外側にある toyfactorial の変数が「見える」。f は局所変数なので、関数の外側に同じ名前の変数があっても影響を与えない。ただし、Rでは呼び出しスタックをさかのぼる動的スコープも実現可能である。 f の内部では自分の名前を参照することができないので、自分自身を再帰的に呼び出すために Recall 関数を用いている。関数型の引数を利用することもでき、その場合複数の関数が互いに呼び出しあうことができ、また無名の関数をその場で定義して関数型の引数として渡すことができる。一種の複文のような用途に用いられる。NA(not available) は統計処理においては欠くことのできない特殊なデータ「欠損値」(欠測値)(missing value)で、データが無効であることを示す。 R言語の関数はそれ自体がオブジェクトであり、ある関数自体を外から参照したり書き換えたりすることができる。関数の本体部分を返す body 関数・仮引数リストを返す formals 関数・関数に付随する環境を返す environment 関数などが用意されている。 渡された式そのものを操作することも可能で、特定の環境(名前とポインタのリスト)の下で与えられた式を評価する eval 関数・渡された式の要素を環境に応じて置き換える substitute 関数・式を文字列に分解する deparse 関数等がある。 関数呼び出しも一種のリストとして処理されており、次のように call 関数を用いて、関数名と引数のリストから関数呼び出しオブジェクトを生成できる。 x <- 1:3y <- 2:4z <- call('plot', x, y)eval(z) 関数はファイルから読み込むこともでき、さらには、パッケージとしてひとまとまりにすることもできる。
※この「制御構造・サブルーチン」の解説は、「R言語」の解説の一部です。
「制御構造・サブルーチン」を含む「R言語」の記事については、「R言語」の概要を参照ください。
- 制御構造・サブルーチンのページへのリンク