Home
Explore
Submit Search
Upload
Login
Signup
Advertisement
Check these out next
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
nakamura001
Yapc -asia 2012 lt @studio3104
Satoshi Suzuki
test
a1yama1123
Local php-100828 2
Akio Ishida
Reactor Pattern and React
Yuya Takeyama
もにかじ2 lt @studio3104
Satoshi Suzuki
CakePHP+Smartyハイブリッドによるラクラク開発
Shinzo SAITO
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
1
of
22
Top clipped slide
Rの環境とスコープ
Oct. 22, 2012
•
0 likes
7 likes
×
Be the first to like this
Show More
•
6,694 views
views
×
Total views
0
On Slideshare
0
From embeds
0
Number of embeds
0
Report
Itoshi Nikaido
Follow
Unit Leader at RIKEN
Advertisement
Advertisement
Advertisement
Recommended
traitを使って楽したい話
infinite_loop
26.5K views
•
44 slides
PHP5.5新機能「ジェネレータ」初心者入門
kwatch
22.2K views
•
63 slides
Rakuten tech conf
Koichi Fujikawa
1.1K views
•
15 slides
Cloud computing competition by Hapyrus
Koichi Fujikawa
1.1K views
•
9 slides
Haskell で CLI
Nobutada Matsubara
3.3K views
•
31 slides
Composable Callbacks & Listeners
Taisuke Oe
2.6K views
•
49 slides
More Related Content
Slideshows for you
(20)
第3回Webkit/HTML5勉強会 - File APIと加速度センサー
nakamura001
•
1.5K views
Yapc -asia 2012 lt @studio3104
Satoshi Suzuki
•
6.1K views
test
a1yama1123
•
188 views
Local php-100828 2
Akio Ishida
•
977 views
Reactor Pattern and React
Yuya Takeyama
•
4.5K views
もにかじ2 lt @studio3104
Satoshi Suzuki
•
935 views
CakePHP+Smartyハイブリッドによるラクラク開発
Shinzo SAITO
•
8.3K views
「Grails-1.1を斬る!〜Grails-1.1からのチーム開発〜」
Tsuyoshi Yamamoto
•
687 views
0x300
geek_alice
•
827 views
PHP Object Injection入門
Yu Iwama
•
228 views
知って得する標準関数の使い方
Soudai Sone
•
1.7K views
「Html sql」で図書館hpにアクセスしてみよう
Kentaro Matsui
•
2.5K views
Chiba.pm #1 lt @studio3104
Satoshi Suzuki
•
786 views
Best practice laravel
Risa Ohnishi
•
1.6K views
Testman
makoto tsuyuki
•
972 views
Cocoa勉強会#43-Blocksを使う
Masayuki Nii
•
693 views
JavaScript入門
Ryo Maruyama
•
1.1K views
Task
Shingo Nakamura
•
633 views
Subprocess no susume
Makoto Kishimoto
•
1.6K views
Teclab3
Eikichi Yamaguchi
•
1.4K views
Similar to Rの環境とスコープ
(6)
RubyとJavaScriptに見る第一級関数
Altech Takeno
•
4K views
R6パッケージの紹介―機能と実装
__nakamichi__
•
27.2K views
Lisp tutorial for Pythonista : Day 2
Ransui Iso
•
2.1K views
たのしい関数型
Shinichi Kozake
•
6.2K views
PythonでLispを実装した (evalつき)
t-sin
•
1.6K views
Web技術勉強会 20110723
龍一 田中
•
748 views
Advertisement
More from Itoshi Nikaido
(9)
第1回HPC OPS研究会 Opening Remarks
Itoshi Nikaido
•
1.2K views
BioDevOpsによる再現性のあるバイオインフォマティクス環境の構築
Itoshi Nikaido
•
5.2K views
Reading circle of Epigenome Roadmap: Roadmap Epigenomics Consortium et. al. I...
Itoshi Nikaido
•
1.8K views
Bioinformatics Analysis Environment for Your Laboratory Use
Itoshi Nikaido
•
3.2K views
DevOpsとcloudで達成する再現性のあるDNAシーケンス解析とスーパーコンピューティング
Itoshi Nikaido
•
2.6K views
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
Itoshi Nikaido
•
3.6K views
Rのオブジェクト
Itoshi Nikaido
•
8K views
ENCODE勉強会
Itoshi Nikaido
•
760 views
いつも側にいるコラボレータ Google+を使った共同研究の進め方
Itoshi Nikaido
•
1.9K views
Rの環境とスコープ
Rの環境とスコープ Itoshi NIKAIDO <dritoshi@gmail.com>
Rはすべてがオブジェクト vector, matrix, 関数... ひとつのクラスに属する
オブジェクトを上書きされたくない 関数を呼び出す パッケージを読み込む
どのような オブジェクトが利用可能か?
Lexical scoping 複数の環境からオブジェクトを探す・環境を作成 する規則
environment 環境
environment = frame +
enclosure
environment = frame +
enclosure symbol value x 1
environment = frame +
enclosure 環境へのpointer どの環境と結びついているのか?
環境の構造 線形のツリー
emptyenv() baseenv() ... ... globalenv() .GlobalEnv いわゆるワークスペース コンソールやスクリプトからの入力さ れたオブジェクトが格納される ※ 関数やパッケージは別
Search Path オブジェクトを検索する順序
emptyenv() R_EmptyEnv search path: オブジェクト baseenv() base を検索する環境の順序 ... search() ... globalenv() R_GlobalEnv
Package やデータがロードされると... library() と
attach() emptyenv() R_EmpltyEnv baseenv() base ロードされたオブジェクトはbase ... と.GlobalEnvの間に置かれる library() ... attach() globalenv() R_GlobalEnv
関数を定義すると... クロージャ環境が作られ、呼び出されるたびに評価環境が生成される
emptyenv() R_EmpltyEnv 関数を定義する その環境を含む環境が作られる baseenv() base = closure 環境 ... 関数を呼び出す クロージャー環境を元に環境 ... (評価環境)が作られて、 1番目に置かれる globalenv() R_GlobalEnv 関数が環境とセットになっているので、関数は自分の場所を知っている。 R はこれを利用してオブジェクトを探す。 このようなスコープ規則のことを Lexical scope と呼ぶ このような関数のことをクロージャ関数と呼ぶ
関数の引数はいつ評価されるのか call-by-value と lazy
evaluation emptyenv() R_EmpltyEnv 関数を定義する その環境を含む環境が作られる baseenv() base = closure 環境 ... 関数を呼び出す クロージャー環境を元に環境 ... (評価環境)が作られて、 1番目に置かれる globalenv() R_GlobalEnv 1. 関数が呼び出されると、評価環境の引数マッチング規則で 仮引数と実引数が照合される 2. 関数が評価される 3. 引数が必要になったら、引数で与えられた値に初期化される (遅延評価) このとき値のポインタではなく、値そのものに置き変わる (値渡し) (遅延評価は予約オブジェクトで達成しているが説明を割愛)
サーチパスを制御したい サーチパスの例外的な処理である名前空間を利用する
emptyenv() R_EmpltyEnv - 同名のオブジェクトを区別する - オブジェクトのカプセル化 をするための例外 = namespace baseenv() base 0. オブジェクトを提供するパッケージ ... の名前空間 1. インポートされオブジェクト 3. search path 2. base パッケージの名前空間 globalenv() R_GlobalEnv
Rで環境を操作する 環境の情報を得る
emptyenv() R_EmpltyEnv 検索する parent.env() environment(ls) baseenv() base 存在の確認 exists(“+”, env = baseenv()) ... search() 環境を作る e1 searchpaths() e1 <- new.env() topenv() globalenv() R_GlobalEnv
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
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)
Rでは環境はどのように表現されているか 実は単なる list R> e
<- new.env() R> e <environment: 0x103186150> R> e$a <- 1 R> e$b <- "hoge" R> e$b # 環境を list にする R> as.list(e) $a [1] 1 $b [1] "hoge"
環境は参照渡し 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
まとめ オブジェクトを上書きしたくなかった • Rは Lexical
scope rule で使えるオブジェクトを知ることができる • Rは環境によって Lexical scope を達成していた • ユーザが環境を作ることでスコープルールに基いたオブジェクトを生 成・管理できる • Namespaceでスコープルールの例外を作り、ユーザがそのスコープ範囲 を決めることができる。Rでは後付けの実装なので今でも仕様が若干変 化中
参考資料 論文、オンラインドキュメント、書籍 •
Lexical Scope and Statistical Computing • The R Language Definition • Rプログラミングマニュアル • Rの基礎とプログラミング技法
Editor's Notes
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
Advertisement