[R]base::I():オブジェクトのデフォルトの解釈/型変換を抑止する関数

説明

オブジェクトのクラスを、そのオブジェクトが’as is’で取り扱われるように変更する。

Rではあるオブジェクトが文脈によって解釈される/型変換されるデフォルトの処理方法が決まっている。特別な状況ではこのデフォルトの振る舞いを抑止したいことがある。このような場合に使うのがI()関数である。具体的な状況については[詳細]の項目を参照。

構文

I(x)

引数

x : 1つのオブジェクト

詳細

I()関数の使用目的は主に以下2つである。

(1)data.frame関数において

オブジェクトをI()関数で囲むことで、文字列型ベクトルを因子型ベクトルに変換したり、データフレームのnamesを削除することを防ぐ。またマトリックスが1つの列として挿入されることを保障する。I()で囲まなければ、as.data.frame()を介してデータフレーム追加される、あるいはデータフレームに変換されてしまうオブジェクトを保護することもできる。

I()関数は”AsIs”というクラスをオブジェクトのクラスの先頭に付加することでこれを実現している。”AsIs”というクラスはそれ独自のメソッドをいくつか持っている([, as.data.frame, print , format)など。

(2) formula関数において

“+”, “-“, “*”,”^”などの演算子をモデル式演算子(formula operator)として解釈することを抑止し、算術演算子(arithmetical operators)として解釈させる。これはterms.formulaによってシンボルとして解釈される。

Rではモデル式と通常の算術式の両方を処理することができる。しかし両者で同一の演算子が別の意味を付与されているという問題がある(例えば+演算子)。

デフォルトではモデル式中の演算子はモデル式演算子として処理される。しかし複雑なモデル式を構築する場合には、モデル式の中に算術演算式を組み込みたい場合もある。このような場合にはある部分が算術演算式であることを明示するために、I()関数を使用しなければならない。

返り値

“AsIs”というクラスをプリペンド(先頭に付加)したオブジェクトのコピー

コメント