名前空間/環境関係の関数
「環境」というと、「プログラミング環境」とかでも使うので、環境オブジェクトがいいかも。
関数の詳細はhelpで調べる。
- search() 名前のサーチパスを表示する。並びは、親子関係によるlinked listになっている。
- library() サーチパスにライブラリ(パッケージ)の名前空間をattachする。
- attach() サーチパスに名前空間をattachする。
- detach() サーチパスから名前空間を削除する。
- searchpaths() seaarchと同じだが、ファイルシステムのパスを表示する
- ls() 環境に含まれる名前を列挙
- get(name, env) 環境から名前の値を取得
- assign(name, val, pos=, enviro=) 指定の環境(名前空間)に値をセットする。
- rm(...) 環境から名前を削除する。
- exists() 環境に名前があるかどうか調べる。
- environment() 現在の環境を得る
- environment(fun) 関数に付随する環境を得る
- new.env() 新しい環境を作る。
- is.environment(x) 環境かどうか
- environmentName(env) 環境の名前、環境自身が保持している名前で呼び名とは違う。
- env.profile(env) これ、よくわからん
特別な環境を返す関数
- globalenv() .GlobalEnv
- emptyenv()
- baseenv() .BaseNamespaceEnv
- topenv()
しばしば出てくるposは、searchのインデックスのこと。pos=-1 だとカレント環境。
環境をたどる関数
- environment() カレント
- parent.env(env) スコープチェーン=サーチパスの親
- parent.frame(env) コールチェーンの親
スコープチェーンの親は静的に決まり、コールチェーンの親は呼び出し時に決まる。関数ローカル環境=関数フレームはそのときどきにアロケートされる(ハードウェアスタックではないはず)。関数からのスコープチェーンとトップレベルからのサーチパスは、透過的に繋がっているようだ。
他に、
すべての名前空間から名前とその実体を探すには、
- getAnywhere()
args()と似たものですべての名前空間を探すのは、
- argsAnywhere()
パッケージから見た名前空間、関数から見える名前空間構造については別途調べる。関数からの見え方はほぼ明らかだとは思うが、目的の関数をfとしてdebug(f)してからfを呼ぶと、fの関数フレームがカレント環境となった状態を見ることができる。