More Related Content
PDF
PDF
PDF
PDF
Cloud computing competition by Hapyrus PDF
PDF
Composable Callbacks & Listeners PPT
PPTX
What's hot
PDF
第3回Webkit/HTML5勉強会 - File APIと加速度センサー PDF
Yapc -asia 2012 lt @studio3104 PDF
PDF
PDF
Reactor Pattern and React PDF
PPTX
CakePHP+Smartyハイブリッドによるラクラク開発 PDF
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」 ODP
PPTX
PDF
PDF
「Html sql」で図書館hpにアクセスしてみよう PDF
Chiba.pm #1 lt @studio3104 PDF
PDF
PDF
PDF
PPT
PDF
PDF
Similar to Rの環境とスコープ
PPT
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと PDF
PDF
PDF
PDF
PDF
PDF
PDF
PPTX
PPTX
Chapter 6: Computing on the language (R Language Definition) PDF
20170923 excelユーザーのためのr入門 PDF
TokyoR101_BeginnersSession1.pdf PPTX
PDF
PDF
PDF
PPTX
PPTX
PPTX
PDF
LET2012 ワークショップ「R による教育・言語データ処理のススメ」 More from Itoshi Nikaido
PDF
第1回HPC OPS研究会 Opening Remarks PDF
BioDevOpsによる再現性のあるバイオインフォマティクス環境の構築 PDF
Reading circle of Epigenome Roadmap: Roadmap Epigenomics Consortium et. al. I... PDF
Bioinformatics Analysis Environment for Your Laboratory Use PDF
DevOpsとcloudで達成する再現性のあるDNAシーケンス解析とスーパーコンピューティング PDF
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq PDF
KEY
KEY
いつも側にいるコラボレータ Google+を使った共同研究の進め方 Rの環境とスコープ
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
環境の構造
線形のツリー
emptyenv()
baseenv()
...
...
globalenv() .GlobalEnv
いわゆるワークスペース
コンソールやスクリプトからの入力さ
れたオブジェクトが格納される
※ 関数やパッケージは別
- 11.
Search Path
オブジェクトを検索する順序
emptyenv() R_EmptyEnv
search path: オブジェクト
baseenv() base
を検索する環境の順序
... search()
...
globalenv() R_GlobalEnv
- 12.
- 13.
関数を定義すると...
クロージャ環境が作られ、呼び出されるたびに評価環境が生成される
emptyenv() R_EmpltyEnv 関数を定義する
その環境を含む環境が作られる
baseenv() base = closure 環境
... 関数を呼び出す
クロージャー環境を元に環境
... (評価環境)が作られて、
1番目に置かれる
globalenv() R_GlobalEnv
関数が環境とセットになっているので、関数は自分の場所を知っている。
R はこれを利用してオブジェクトを探す。
このようなスコープ規則のことを Lexical scope と呼ぶ
このような関数のことをクロージャ関数と呼ぶ
- 14.
関数の引数はいつ評価されるのか
call-by-value と lazyevaluation
emptyenv() R_EmpltyEnv 関数を定義する
その環境を含む環境が作られる
baseenv() base = closure 環境
... 関数を呼び出す
クロージャー環境を元に環境
... (評価環境)が作られて、
1番目に置かれる
globalenv() R_GlobalEnv
1. 関数が呼び出されると、評価環境の引数マッチング規則で
仮引数と実引数が照合される
2. 関数が評価される
3. 引数が必要になったら、引数で与えられた値に初期化される (遅延評価)
このとき値のポインタではなく、値そのものに置き変わる (値渡し)
(遅延評価は予約オブジェクトで達成しているが説明を割愛)
- 15.
サーチパスを制御したい
サーチパスの例外的な処理である名前空間を利用する
emptyenv() R_EmpltyEnv - 同名のオブジェクトを区別する
- オブジェクトのカプセル化
をするための例外 = namespace
baseenv() base
0. オブジェクトを提供するパッケージ
...
の名前空間
1. インポートされオブジェクト
3. search path 2. base パッケージの名前空間
globalenv() R_GlobalEnv
- 16.
Rで環境を操作する
環境の情報を得る
emptyenv() R_EmpltyEnv 検索する
parent.env() environment(ls)
baseenv() base 存在の確認
exists(“+”, env = baseenv())
...
search() 環境を作る
e1
searchpaths() e1 <- new.env()
topenv()
globalenv() R_GlobalEnv
- 17.
Rで環境を操作する
環境に対する変数の操作
emptyenv() R_EmpltyEnv
baseenv() base
# 変数を割り当てる
> assign("a", 1:10, envir = baseenv())
# 検索する
> exists("a", envir = globalenv(), inherits = FALSE)
[1] FALSE
> exists("a", envir = baseenv(), inherits = FALSE)
[1] TRUE
# 変数を検索して、値を取り出す
> mget("a", envir = baseenv())
$a
[1] 1 2 3 4 5 6 7 8 9 10
> get("a", envir = baseenv())
[1] 1 2 3 4 5 6 7 8 9 10
- 18.
Rで名前空間を操作する
名前空間の情報を得る・パッケージ内の変数にアクセスする
# 名前空間の情報 # 変数にアクセスする
loadedNamespaces() # Package::name
# export() されている関数
# 名前空間の操作 base::log
loadNamespace(ns)
unloadNamespace(ns) # Package:::name
attachNamespace(ns) # export() されていない関数
library(“Package”)
# 名前空間の作成 Package:::name
asNamespace(“name”)
# エクスポート # 関数を適用
namespaceExport(ns) eapply(env, FUN)
- 19.
- 20.
環境は参照渡し
Rは基本的に値渡しであるが環境は例外
R> e <-new.env()
R> e2 <- e
R> e
<environment: 0x103186150>
R> e2
<environment: 0x103186150>
# 同じポインタをさしている
R> e$a
NULL
# e2 に a をつくる
R> e2$a <- 1
R> e2$a
1
# 参照渡しなのでe にも a ができている
R> e$a
[1] 1
- 21.
まとめ
オブジェクトを上書きしたくなかった
• Rは Lexicalscope rule で使えるオブジェクトを知ることができる
• Rは環境によって Lexical scope を達成していた
• ユーザが環境を作ることでスコープルールに基いたオブジェクトを生
成・管理できる
• Namespaceでスコープルールの例外を作り、ユーザがそのスコープ範囲
を決めることができる。Rでは後付けの実装なので今でも仕様が若干変
化中
- 22.
参考資料
論文、オンラインドキュメント、書籍
•Lexical Scope and Statistical Computing
• The R Language Definition
• Rプログラミングマニュアル
• Rの基礎とプログラミング技法