Enviar búsqueda
Cargar
Rの環境とスコープ
•
7 recomendaciones
•
6,798 vistas
Itoshi Nikaido
Seguir
Denunciar
Compartir
Denunciar
Compartir
1 de 22
Recomendados
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
FM-indexによる全文検索
FM-indexによる全文検索
Sho IIZUKA
Rcppのすすめ
Rcppのすすめ
Masaki Tsuda
LakeTahoe
LakeTahoe
Yahoo!デベロッパーネットワーク
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
Lockfree list
Lockfree list
Kumazaki Hiroki
Topological sort
Topological sort
HCPC: 北海道大学競技プログラミングサークル
Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?
jundoll
Recomendados
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
FM-indexによる全文検索
FM-indexによる全文検索
Sho IIZUKA
Rcppのすすめ
Rcppのすすめ
Masaki Tsuda
LakeTahoe
LakeTahoe
Yahoo!デベロッパーネットワーク
Rolling hash
Rolling hash
HCPC: 北海道大学競技プログラミングサークル
Lockfree list
Lockfree list
Kumazaki Hiroki
Topological sort
Topological sort
HCPC: 北海道大学競技プログラミングサークル
Rによる高速処理 まだfor使ってるの?
Rによる高速処理 まだfor使ってるの?
jundoll
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Proktmr
Divisor
Divisor
oupc
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
Unity Technologies Japan K.K.
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
なおき きしだ
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
SaitoTsutomu
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
Abc009
Abc009
AtCoder Inc.
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
Takuya Akiba
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
imuyaoti
Rの高速化
Rの高速化
弘毅 露崎
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
AtCoder Inc.
様々な全域木問題
様々な全域木問題
tmaehara
lsh
lsh
Shunsuke Aihara
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
言語処理系入門5
言語処理系入門5
Kenta Hattori
RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数
Altech Takeno
Más contenido relacionado
La actualidad más candente
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Proktmr
Divisor
Divisor
oupc
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
Unity Technologies Japan K.K.
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
Yahoo!デベロッパーネットワーク
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
なおき きしだ
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Takuya Akiba
Rolling Hashを殺す話
Rolling Hashを殺す話
Nagisa Eto
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
SaitoTsutomu
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
Takuya Akiba
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
Takuya Akiba
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Yahoo!デベロッパーネットワーク
Abc009
Abc009
AtCoder Inc.
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
Takuya Akiba
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
imuyaoti
Rの高速化
Rの高速化
弘毅 露崎
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
MITSUNARI Shigeo
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
AtCoder Inc.
様々な全域木問題
様々な全域木問題
tmaehara
lsh
lsh
Shunsuke Aihara
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Takuya Akiba
La actualidad más candente
(20)
図と実装で理解する『木構造入門』
図と実装で理解する『木構造入門』
Divisor
Divisor
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
【Unite Tokyo 2018 Training Day】C#JobSystem & ECSでCPUを極限まで使い倒そう ~C# JobSystem 編~
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes パネルディスカッション
Java8でRDBMS作ったよ
Java8でRDBMS作ったよ
プログラミングコンテストでのデータ構造 2 ~動的木編~
プログラミングコンテストでのデータ構造 2 ~動的木編~
Rolling Hashを殺す話
Rolling Hashを殺す話
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
組合せ最適化を体系的に知ってPythonで実行してみよう PyCon 2015
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでの乱択アルゴリズム
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
プログラミングコンテストでのデータ構造 2 ~平衡二分探索木編~
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Abc009
Abc009
平面グラフと交通ネットワークのアルゴリズム
平面グラフと交通ネットワークのアルゴリズム
for関数を使った繰り返し処理によるヒストグラムの一括出力
for関数を使った繰り返し処理によるヒストグラムの一括出力
Rの高速化
Rの高速化
Intro to SVE 富岳のA64FXを触ってみた
Intro to SVE 富岳のA64FXを触ってみた
AtCoder Regular Contest 029 解説
AtCoder Regular Contest 029 解説
様々な全域木問題
様々な全域木問題
lsh
lsh
勉強か?趣味か?人生か?―プログラミングコンテストとは
勉強か?趣味か?人生か?―プログラミングコンテストとは
Similar a Rの環境とスコープ
言語処理系入門5
言語処理系入門5
Kenta Hattori
RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数
Altech Takeno
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
__nakamichi__
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
Ransui Iso
たのしい関数型
たのしい関数型
Shinichi Kozake
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)
t-sin
Web技術勉強会 20110723
Web技術勉強会 20110723
龍一 田中
Similar a Rの環境とスコープ
(7)
言語処理系入門5
言語処理系入門5
RubyとJavaScriptに見る第一級関数
RubyとJavaScriptに見る第一級関数
R6パッケージの紹介―機能と実装
R6パッケージの紹介―機能と実装
Lisp tutorial for Pythonista : Day 2
Lisp tutorial for Pythonista : Day 2
たのしい関数型
たのしい関数型
PythonでLispを実装した (evalつき)
PythonでLispを実装した (evalつき)
Web技術勉強会 20110723
Web技術勉強会 20110723
Más de Itoshi Nikaido
第1回HPC OPS研究会 Opening Remarks
第1回HPC OPS研究会 Opening Remarks
Itoshi Nikaido
BioDevOpsによる再現性のあるバイオインフォマティクス環境の構築
BioDevOpsによる再現性のあるバイオインフォマティクス環境の構築
Itoshi Nikaido
Reading circle of Epigenome Roadmap: Roadmap Epigenomics Consortium et. al. I...
Reading circle of Epigenome Roadmap: Roadmap Epigenomics Consortium et. al. I...
Itoshi Nikaido
Bioinformatics Analysis Environment for Your Laboratory Use
Bioinformatics Analysis Environment for Your Laboratory Use
Itoshi Nikaido
DevOpsとcloudで達成する再現性のあるDNAシーケンス解析とスーパーコンピューティング
DevOpsとcloudで達成する再現性のあるDNAシーケンス解析とスーパーコンピューティング
Itoshi Nikaido
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
Itoshi Nikaido
Rのオブジェクト
Rのオブジェクト
Itoshi Nikaido
ENCODE勉強会
ENCODE勉強会
Itoshi Nikaido
いつも側にいるコラボレータ Google+を使った共同研究の進め方
いつも側にいるコラボレータ Google+を使った共同研究の進め方
Itoshi Nikaido
Más de Itoshi Nikaido
(9)
第1回HPC OPS研究会 Opening Remarks
第1回HPC OPS研究会 Opening Remarks
BioDevOpsによる再現性のあるバイオインフォマティクス環境の構築
BioDevOpsによる再現性のあるバイオインフォマティクス環境の構築
Reading circle of Epigenome Roadmap: Roadmap Epigenomics Consortium et. al. I...
Reading circle of Epigenome Roadmap: Roadmap Epigenomics Consortium et. al. I...
Bioinformatics Analysis Environment for Your Laboratory Use
Bioinformatics Analysis Environment for Your Laboratory Use
DevOpsとcloudで達成する再現性のあるDNAシーケンス解析とスーパーコンピューティング
DevOpsとcloudで達成する再現性のあるDNAシーケンス解析とスーパーコンピューティング
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
0.1 pg の mRNA をシーケンスする高精度なRNA-Seq法: Quartz-Seq
Rのオブジェクト
Rのオブジェクト
ENCODE勉強会
ENCODE勉強会
いつも側にいるコラボレータ Google+を使った共同研究の進め方
いつも側にいるコラボレータ Google+を使った共同研究の進め方
Rの環境とスコープ
1.
Rの環境とスコープ Itoshi NIKAIDO <dritoshi@gmail.com>
2.
Rはすべてがオブジェクト vector, matrix, 関数... ひとつのクラスに属する
3.
オブジェクトを上書きされたくない 関数を呼び出す パッケージを読み込む
4.
どのような オブジェクトが利用可能か?
5.
Lexical scoping 複数の環境からオブジェクトを探す・環境を作成 する規則
6.
environment 環境
7.
environment = frame +
enclosure
8.
environment = frame +
enclosure symbol value x 1
9.
environment = frame +
enclosure 環境へのpointer どの環境と結びついているのか?
10.
環境の構造 線形のツリー
emptyenv() baseenv() ... ... globalenv() .GlobalEnv いわゆるワークスペース コンソールやスクリプトからの入力さ れたオブジェクトが格納される ※ 関数やパッケージは別
11.
Search Path オブジェクトを検索する順序
emptyenv() R_EmptyEnv search path: オブジェクト baseenv() base を検索する環境の順序 ... search() ... globalenv() R_GlobalEnv
12.
Package やデータがロードされると... library() と
attach() emptyenv() R_EmpltyEnv baseenv() base ロードされたオブジェクトはbase ... と.GlobalEnvの間に置かれる library() ... attach() globalenv() R_GlobalEnv
13.
関数を定義すると... クロージャ環境が作られ、呼び出されるたびに評価環境が生成される
emptyenv() R_EmpltyEnv 関数を定義する その環境を含む環境が作られる baseenv() base = closure 環境 ... 関数を呼び出す クロージャー環境を元に環境 ... (評価環境)が作られて、 1番目に置かれる globalenv() R_GlobalEnv 関数が環境とセットになっているので、関数は自分の場所を知っている。 R はこれを利用してオブジェクトを探す。 このようなスコープ規則のことを Lexical scope と呼ぶ このような関数のことをクロージャ関数と呼ぶ
14.
関数の引数はいつ評価されるのか call-by-value と lazy
evaluation 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.
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"
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は Lexical
scope rule で使えるオブジェクトを知ることができる • Rは環境によって Lexical scope を達成していた • ユーザが環境を作ることでスコープルールに基いたオブジェクトを生 成・管理できる • Namespaceでスコープルールの例外を作り、ユーザがそのスコープ範囲 を決めることができる。Rでは後付けの実装なので今でも仕様が若干変 化中
22.
参考資料 論文、オンラインドキュメント、書籍 •
Lexical Scope and Statistical Computing • The R Language Definition • Rプログラミングマニュアル • Rの基礎とプログラミング技法
Notas del editor
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n