このブログは、旧・はてなダイアリー「檜山正幸のキマイラ飼育記 メモ編」(http://d.hatena.ne.jp/m-hiyama-memo/)のデータを移行・保存したものであり、今後(2019年1月以降)更新の予定はありません。

今後の更新は、新しいブログ http://m-hiyama-memo.hatenablog.com/ で行います。

名前空間/環境関係の関数

「環境」というと、「プログラミング環境」とかでも使うので、環境オブジェクトがいいかも。

関数の詳細は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) コールチェーンの親

スコープチェーンの親は静的に決まり、コールチェーンの親は呼び出し時に決まる。関数ローカル環境=関数フレームはそのときどきにアロケートされる(ハードウェアスタックではないはず)。関数からのスコープチェーンとトップレベルからのサーチパスは、透過的に繋がっているようだ。

他に、

  • .libPaths() ライブラリをロードする元のディレクトリ達(ライブラリパス)
  • .Library.site ユーザーのライブラリディレクトリの位置
  • .Library ライブラリディレクトリの位置

すべての名前空間から名前とその実体を探すには、

  • getAnywhere()

args()と似たものですべての名前空間を探すのは、

  • argsAnywhere()

パッケージから見た名前空間、関数から見える名前空間構造については別途調べる。関数からの見え方はほぼ明らかだとは思うが、目的の関数をfとしてdebug(f)してからfを呼ぶと、fの関数フレームがカレント環境となった状態を見ることができる。