Suche senden
Hochladen
Chapter 6: Computing on the language (R Language Definition)
•
Als PPTX, PDF herunterladen
•
5 gefällt mir
•
3,452 views
Nagi Teramo
Folgen
Tokyo.Lang.R #2(http://atnd.org/events/28465)でのトーク資料。
Weniger lesen
Mehr lesen
Technologie
Melden
Teilen
Melden
Teilen
1 von 29
Jetzt herunterladen
Empfohlen
Cvpr2011 reading-tsubosaka
Cvpr2011 reading-tsubosaka
正志 坪坂
Project lambda
Project lambda
Appresso Engineering Team
Introduction Xtend
Introduction Xtend
Hideki Kishida
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】
Yukiko Kato
Active Directoryデータの Security Descriptor
Active Directoryデータの Security Descriptor
Michio Koyama
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義
JPCERT Coordination Center
JastAdd & JastAddJ クリックチュートリアル
JastAdd & JastAddJ クリックチュートリアル
Fuminobu Takeyama
Empfohlen
Cvpr2011 reading-tsubosaka
Cvpr2011 reading-tsubosaka
正志 坪坂
Project lambda
Project lambda
Appresso Engineering Team
Introduction Xtend
Introduction Xtend
Hideki Kishida
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
12-11-30 Kashiwa.R #5 初めてのR Rを始める前に知っておきたい10のこと
Haruka Ozaki
Javaプログラミング入門【第2回】
Javaプログラミング入門【第2回】
Yukiko Kato
Active Directoryデータの Security Descriptor
Active Directoryデータの Security Descriptor
Michio Koyama
Javaセキュアコーディングセミナー東京第4回講義
Javaセキュアコーディングセミナー東京第4回講義
JPCERT Coordination Center
JastAdd & JastAddJ クリックチュートリアル
JastAdd & JastAddJ クリックチュートリアル
Fuminobu Takeyama
Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】
Yukiko Kato
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
Yukiko Kato
プログラミング言語Scala
プログラミング言語Scala
TanUkkii
Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】
Yukiko Kato
Scala with DDD
Scala with DDD
潤一 加藤
Actor&stm
Actor&stm
潤一 加藤
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
Masahiro Sakai
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to Objects
Fumitaka Yamada
東京都市大学 データ解析入門 3 行列分解 2
東京都市大学 データ解析入門 3 行列分解 2
hirokazutanaka
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
hirokazutanaka
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
hirokazutanaka
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
hirokazutanaka
Monadicプログラミング マニアックス
Monadicプログラミング マニアックス
Tomoharu ASAMI
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
深層学習 Day1レポート
深層学習 Day1レポート
taishimotoda
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
hirokazutanaka
東京都市大学 データ解析入門 2 行列分解 1
東京都市大学 データ解析入門 2 行列分解 1
hirokazutanaka
東京都市大学 データ解析入門 9 クラスタリングと分類分析 2
東京都市大学 データ解析入門 9 クラスタリングと分類分析 2
hirokazutanaka
BOF1-Scala02.pdf
BOF1-Scala02.pdf
Hiroshi Ono
Javaプログラミング入門【第5回】
Javaプログラミング入門【第5回】
Yukiko Kato
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
Pythonintro
Pythonintro
Mikio Kubo
Weitere ähnliche Inhalte
Was ist angesagt?
Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】
Yukiko Kato
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
Yukiko Kato
プログラミング言語Scala
プログラミング言語Scala
TanUkkii
Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】
Yukiko Kato
Scala with DDD
Scala with DDD
潤一 加藤
Actor&stm
Actor&stm
潤一 加藤
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
Masahiro Sakai
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to Objects
Fumitaka Yamada
東京都市大学 データ解析入門 3 行列分解 2
東京都市大学 データ解析入門 3 行列分解 2
hirokazutanaka
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
hirokazutanaka
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
hirokazutanaka
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
hirokazutanaka
Monadicプログラミング マニアックス
Monadicプログラミング マニアックス
Tomoharu ASAMI
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
koji lin
深層学習 Day1レポート
深層学習 Day1レポート
taishimotoda
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
hirokazutanaka
東京都市大学 データ解析入門 2 行列分解 1
東京都市大学 データ解析入門 2 行列分解 1
hirokazutanaka
東京都市大学 データ解析入門 9 クラスタリングと分類分析 2
東京都市大学 データ解析入門 9 クラスタリングと分類分析 2
hirokazutanaka
BOF1-Scala02.pdf
BOF1-Scala02.pdf
Hiroshi Ono
Javaプログラミング入門【第5回】
Javaプログラミング入門【第5回】
Yukiko Kato
Was ist angesagt?
(20)
Javaプログラミング入門【第7回】
Javaプログラミング入門【第7回】
Javaプログラミング入門【第3回】
Javaプログラミング入門【第3回】
プログラミング言語Scala
プログラミング言語Scala
Javaデザインパターン入門【第3回】
Javaデザインパターン入門【第3回】
Scala with DDD
Scala with DDD
Actor&stm
Actor&stm
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
“Design and Implementation of Generics for the .NET Common Language Runtime”他...
C#を始めたばかりの人へのLINQ to Objects
C#を始めたばかりの人へのLINQ to Objects
東京都市大学 データ解析入門 3 行列分解 2
東京都市大学 データ解析入門 3 行列分解 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 7 回帰分析とモデル選択 2
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 6 回帰分析とモデル選択 1
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
東京都市大学 データ解析入門 8 クラスタリングと分類分析 1
Monadicプログラミング マニアックス
Monadicプログラミング マニアックス
サーバーサイドでの非同期処理で色々やったよ
サーバーサイドでの非同期処理で色々やったよ
深層学習 Day1レポート
深層学習 Day1レポート
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
東京都市大学 データ解析入門 4 スパース性と圧縮センシング1
東京都市大学 データ解析入門 2 行列分解 1
東京都市大学 データ解析入門 2 行列分解 1
東京都市大学 データ解析入門 9 クラスタリングと分類分析 2
東京都市大学 データ解析入門 9 クラスタリングと分類分析 2
BOF1-Scala02.pdf
BOF1-Scala02.pdf
Javaプログラミング入門【第5回】
Javaプログラミング入門【第5回】
Ähnlich wie Chapter 6: Computing on the language (R Language Definition)
関数プログラミング入門
関数プログラミング入門
Hideyuki Tanaka
Pythonintro
Pythonintro
Mikio Kubo
Haskell超入門 Part.1
Haskell超入門 Part.1
Yuichi Watanabe
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
Kimikazu Kato
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
Ouka Yuka
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
Naoki Kitora
たのしい関数型
たのしい関数型
Shinichi Kozake
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
Tetsuya Yoshida
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
Naoki Aoyama
fanscala1 2 scalaの基本
fanscala1 2 scalaの基本
Toshiki Shinozaki
R language definition3.1_3.2
R language definition3.1_3.2
Yoshiteru Kamiyama
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
yashigani
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
Tomoharu ASAMI
言語処理系入門5
言語処理系入門5
Kenta Hattori
Haskell勉強会 in ie
Haskell勉強会 in ie
maeken2010
たのしい高階関数
たのしい高階関数
Shinichi Kozake
Everyday Life with clojure.spec
Everyday Life with clojure.spec
Kent Ohashi
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Masahiro Hayashi
Ähnlich wie Chapter 6: Computing on the language (R Language Definition)
(20)
関数プログラミング入門
関数プログラミング入門
Pythonintro
Pythonintro
Haskell超入門 Part.1
Haskell超入門 Part.1
純粋関数型アルゴリズム入門
純粋関数型アルゴリズム入門
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
(Ruby使いのための)Scalaで学ぶ関数型プログラミング
命令プログラミングから関数プログラミングへ
命令プログラミングから関数プログラミングへ
たのしい関数型
たのしい関数型
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
fanscala1 2 scalaの基本
fanscala1 2 scalaの基本
R language definition3.1_3.2
R language definition3.1_3.2
すごいHaskell読書会#1 in 大阪
すごいHaskell読書会#1 in 大阪
JavaScript 講習会 #1
JavaScript 講習会 #1
Clojure programming-chapter-2
Clojure programming-chapter-2
実務者のためのかんたんScalaz
実務者のためのかんたんScalaz
言語処理系入門5
言語処理系入門5
Haskell勉強会 in ie
Haskell勉強会 in ie
たのしい高階関数
たのしい高階関数
Everyday Life with clojure.spec
Everyday Life with clojure.spec
初心者講習会資料(Osaka.R#5)
初心者講習会資料(Osaka.R#5)
Mehr von Nagi Teramo
第86回R勉強会@東京 LT資料
第86回R勉強会@東京 LT資料
Nagi Teramo
Rでを作る
Rでを作る
Nagi Teramo
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
Nagi Teramo
healthplanetパッケージで体組成データを手に入れて健康な体も手に入れる
healthplanetパッケージで体組成データを手に入れて健康な体も手に入れる
Nagi Teramo
闇と向き合う
闇と向き合う
Nagi Teramo
機械の体を手に入れるのよ、鉄郎!!!
機械の体を手に入れるのよ、鉄郎!!!
Nagi Teramo
続わかりやすいパターン認識11章(11.1 - 11.4)
続わかりやすいパターン認識11章(11.1 - 11.4)
Nagi Teramo
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet
Nagi Teramo
Ultra Lightning Talk × 3
Ultra Lightning Talk × 3
Nagi Teramo
F#談話室(17)
F#談話室(17)
Nagi Teramo
RFinanceJはじめました
RFinanceJはじめました
Nagi Teramo
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
Nagi Teramo
お前の逐モン、GETだぜ!
お前の逐モン、GETだぜ!
Nagi Teramo
Trading volume mapping R in recent environment
Trading volume mapping R in recent environment
Nagi Teramo
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
Nagi Teramo
とある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみた
Nagi Teramo
可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~
Nagi Teramo
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Nagi Teramo
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Nagi Teramo
レプリカ交換モンテカルロ法で乱数の生成
レプリカ交換モンテカルロ法で乱数の生成
Nagi Teramo
Mehr von Nagi Teramo
(20)
第86回R勉強会@東京 LT資料
第86回R勉強会@東京 LT資料
Rでを作る
Rでを作る
Reproducebility 100倍 Dockerマン
Reproducebility 100倍 Dockerマン
healthplanetパッケージで体組成データを手に入れて健康な体も手に入れる
healthplanetパッケージで体組成データを手に入れて健康な体も手に入れる
闇と向き合う
闇と向き合う
機械の体を手に入れるのよ、鉄郎!!!
機械の体を手に入れるのよ、鉄郎!!!
続わかりやすいパターン認識11章(11.1 - 11.4)
続わかりやすいパターン認識11章(11.1 - 11.4)
5分でわかるかもしれないglmnet
5分でわかるかもしれないglmnet
Ultra Lightning Talk × 3
Ultra Lightning Talk × 3
F#談話室(17)
F#談話室(17)
RFinanceJはじめました
RFinanceJはじめました
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
東京R非公式おじさんが教える本当に気持ちいいパッケージ作成法
お前の逐モン、GETだぜ!
お前の逐モン、GETだぜ!
Trading volume mapping R in recent environment
Trading volume mapping R in recent environment
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
~knitr+pandocではじめる~『R MarkdownでReproducible Research』
とある金融屋の統計技師が時系列解析してみた
とある金融屋の統計技師が時系列解析してみた
可視化周辺の進化がヤヴァイ~rChartsを中心として~
可視化周辺の進化がヤヴァイ~rChartsを中心として~
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
「plyrパッケージで君も前処理スタ☆」改め「plyrパッケージ徹底入門」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
Tokyo.R 白熱教室「これからのRcppの話をしよう」
レプリカ交換モンテカルロ法で乱数の生成
レプリカ交換モンテカルロ法で乱数の生成
Kürzlich hochgeladen
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
danielhu54
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
Kürzlich hochgeladen
(10)
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Postman LT Fukuoka_Quick Prototype_By Daniel
Postman LT Fukuoka_Quick Prototype_By Daniel
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Chapter 6: Computing on the language (R Language Definition)
1.
R Language Definition
version 2.14.2(2012-02-29) DRAFT Chapter 6: Computing on the language Tokyo.Lang.R #2 2012/06/02 @teramonagi
2.
6 Computing on
the language • RはLispよりも親しみやすいインターフェイス • しかし、計算エンジンはLisp-like • (数式の)“expression”にアクセス可能 • 微分等を解析的に計算可能!(Not 数値的) • example > curve(sin(x)) > curve(cos(x)) 2
3.
6.1 Direct manipulation
of language objects • Language objectsは3種類 1. call 2. expression 3. function • まずはcall objectについてのお話 • call object = “unevaluated expressions” – quote関数で生成 – その名の通り“まだ評価されていない” – eval関数で評価してやる – [[]]でlist-likeに表現の各要素?にアクセス可能 3
4.
6.1 Direct manipulation
of language objects > e1 <- quote(2 + 2) > as.list(e1) > mode(e1) [[1]] [1] "call" `+` > typeof(e1) call型 実際これで [1] "language" [[2]] Listになる > e1[[1]] [1] 2 `+` > e1[[2]] [[3]] [1] 2 Listのように [1] 2 > e1[[3]] アクセス可能 [1] 2 4
5.
6.1 Direct manipulation
of language objects > mode(e1[[1]]) > e1[[2]] <- e1 [1] "name" > e1 > mode(e1[[2]]) 2*2*2 演算子(+,*等)や callを要素?として [1] "numeric" 代入する事も可能 変数は”name” > mode(e1[[3]]) [1] "numeric" > e1[[1]] <- as.name("*") > e1 2*2 演算子の挿げ替え (関数も可) 5
6.
6.1 Direct manipulation
of language objects > x <- quote(c(1,2)) > deparse(quote("-"(2,2))) > as.list(x) [1] "2 - 2" [[1]] > deparse(quote(2 - 2)) c [1] "2 - 2" [[2]] [1] 1 [[3]] [1] 2 同じ表現にdeparse されるとは限らない > deparse(x) [1] "c(1, 2)" > class(deparse(x)) [1] "character" deparse(call→文字列化) 6
7.
6.2 Substitutions • “expression”をplotラベルとして文字列化した
い • そんな時のsubstitute関数。俗に言う“deparse” (オブジェクト⇒文字) • 遅延評価に使われる”promise”オブジェクトの expression スロットの値を引っこ抜く • “promise”オブジェクトは – expression:中身の“表現” – environment:評価される際の“環境“ – value:(もし一度評価されているなら)その“値“ の3つのSLOTを持っている(2.1.8より) 7
8.
6.2 Substitutions plot(0) for(i in
1:4) { text(1, 0.2 * i, substitute(x[ix] == y, list(ix = i, y = pnorm(i)))) } 1.0 x4 0.9999683 x3 0.9986501 x2 0.9772499 x1 0.8413447 0.0 0 -1.0 0.6 0.8 1.0 1.2 1.4 Index 8
9.
6.2 Substitutions plot(0)
bquote関数で for( i in 1:4) 略記が可能 { text(1, 0.2 * i, bquote(x[.(i)] == .(pnorm(i)) )) } 1.0 x4 0.9999683 x3 0.9986501 x2 0.9772499 x1 0.8413447 0.0 0 -1.0 0.6 0.8 1.0 1.2 1.4 Index 9
10.
6.2 Substitutions > expr
<- quote(x + y) > nested <- > not.nested <- substitute(substitute(e, substitute(expr, list(x = 3)) list(x = 3)), list(e = expr)) > class(not.nested) > class(nested) substituteを [1] "name" [1] "call" ネストして適用 > typeof(not.nested) > typeof(nested) [1] "symbol" [1] "language" > eval(not.nested) > eval(nested) x+y 3+y 第一引数(quote(x+y))を評価しないので 正しくdeparse(文字列化されない) 10
11.
6.2 Substitutions > default
<- 1 > f <- eval(bquote( function(x, y = .(default)) x+y )) > f(2) [1] 3 かなりヤンチャな書き方もできる。。。 が、可読性が。。。 11
12.
6.2 Substitutions • 厳密なルール
– パースツリーのそれぞれのシンボルが第二引数 (タグ付されたリストか環境)にマッチされる – シンボルがローカル変数の場合は、そのローカル の値が挿入される(グローバル環境にマッチされ る場合除く) – シンボルがpromise(関数の引数等)ならその表 現が代入される(たぶん遅延評価の事) – substituteの前にローカル変数が変更された場合、 Rは新しい値を使う一方、Sの場合はargument expressionを使う 12
13.
}
y <- log(y) 45, 1.09861228866811, 1.38629436111989, 1.6094379124341, logplot(1:19) 1.94591014905531, 2.07944154167984, 2.19722457733622, , 2.39789527279837, 2.484906649788, 2.56494935746154, 0.0 1.5 3.0 2.70805020110221, 2.77258872223978, 2.83321334405622, 2.89037175789616, 2.94443897916644) plot(y, ylab = ylab) 5 10 Index logplot <- function(y, ylab = deparse(substitute(y))){ 15 6.2 Substitutions 13
14.
6.2 Substitutions logplot <-
function(y, ylab = deparse(substitute(y))){ ylab y <- log(y) plot(y, ylab = ylab) “ylab”をあらかじめ } 評価しておくと良い logplot(1:19) 3.0 1:19 1.5 0.0 5 10 15 Index 14
15.
6.3 More on
evaluation • eval関数 ‒ “call”オブジェクトを評価するときに使用 ‒ どの“環境”で評価をするのかを指定可能 – 例(親環境評価):eval(expr, > x <- sys.frame(sys.parent()) 3 > y <- 10 > eval(quote(x+y), data.frame(x = 1:10), sys.frame(sys.parent())) [1] 11 12 13 14 15 16 17 18 19 20 > eval(quote(x+y), sys.frame(sys.parent())) 先にデータの値を [1] 13 使って評価してくれる 15
16.
6.4 Evaluation of
expression objects • Expression object(2.1.4に記載あり) – 特殊なLanguage Object – Language objectとの違い • 複数のExpressionを保持(call objectのlistみたいなもん) • eval関数に通したときのみ評価される > ex <- expression(2 + 2, 3 + 4) call objectの > ex[[1]] リストっぽく扱える 2+2 > ex[[2]] 3+4 最後に評価されたものが値として返ってくる > eval(ex) (中で評価は全部されてる) [1] 7 16
17.
6.4 Evaluation of
expression objects • 前述の例は基本quote({2 + 2; 3 + 4})と同じ • Language objectとの違い • eval関数に通したときのみ評価される > eval(substitute(mode(x), list(x = quote(2 + 2)))) [1] "numeric" 再帰的に evalされる > eval(substitute(mode(x), list(x = expression(2 + 2)))) [1] "expression" “直に”eval関数に渡されない場合は expressionは評価されない 17
18.
6.4 Evaluation of
expression objects > e <- quote(expression(2 + 2)) >e expressionを作るcall object expression(2 + 2) > mode(e) [1] "call" > ee <- expression(2 + 2) vs > ee expression(2 + 2) > mode(ee) 普通のexpression [1] "expression" 18
19.
6.5 Manipulation of
function calls • 関数がどのように呼ばれたのかを見たい – sys.call関数 – match.call関数 > f <- function(x, y, ...) sys.call() > f(y = 1, 2, z = 3, 4) “2”がxに割り当てられている のがわかりにくい f(y = 1, 2, z = 3, 4) > f <- function(x, y, ...) match.call() “2”がxに割り当てられている > f(y = 1, 2, z = 3, 4) のがわかりやすい f(x = 2, y = 1, z = 3, 4) ※返り値は 両方共Call Object 19
20.
6.5 Manipulation of
function calls • match.callは同じ引数で違う関数を呼ばれる時 によく使われる(例:lm関数の頭) vh> f <- function (formula, data, subset, weights, na.action, method = "qr", + model = TRUE, x = FALSE, y = FALSE, qr = TRUE, singular.ok = TRUE, + contrasts = NULL, offset, ...) +{ + cl <- match.call() + mf <- match.call(expand.dots = FALSE) + m <- match(c("formula", "data", "subset", "weights", "na.action", + "offset"), names(mf), 0L) + mf <- mf[c(1L, m)] + print(mf) + mf$drop.unused.levels <- TRUE + print(mf[[1L]]) 関数名だけ + mf[[1L]] <- as.name("model.frame") + print(mf) 変更して評価 + eval(mf, parent.frame()) +} 20
21.
6.5 Manipulation of
function calls > f(y~x, data.frame(x=1:10, y = 1:10 + rnorm(10))) f(formula = y ~ x, data = data.frame(x = 1:10, y = 1:10 + rnorm(10))) f model.frame(formula = y ~ x, data = data.frame(x = 1:10, y = 1:10 + rnorm(10)), drop.unused.levels = TRUE) y x 関数名 1 1.409984 1 2 3.925316 2 変更前 3 5.449060 3 4 4.462354 4 関数名変更+項目追加 5 5.494868 5 6 6.283794 6 7 7.479154 7 8 8.675264 8 9 8.283814 9 10 9.259617 10 21
22.
6.5 Manipulation of
function calls • match.callのexpand.dotsをFALSEにすると”…”が ひと固まりのリストとして扱われる > f <- function(x, y, ...) match.call(expand.dots = FALSE) > f(y = 1, 2, z = 3, 4) f(x = 2, y = 1, ... = list(z = 3, 4)) > f(y = 1, 2, z = 3, 4)$... $z リストとして扱われる。特に [1] 3 f(y = 1, 2, z = 3, 4)$... <- NULL [[2]] 等として要らないものを消去 [1] 4 する際に使用 22
23.
6.5 Manipulation of
function calls • 関数呼び出しを作成する2つの関数 – call関数 – do.call関数 • call関数 – 関数名と引数のリストからcall objectを生成 • do.call関数 – call関数と似てるけど、こちら値を即評価 – modeがlistな引数に指定した関数を適用 (data.frameのmodeもlistなんで適用可能) 23
24.
6.5 Manipulation of
function calls • 関数Callを作成する2つの関数 – call関数 – do.call関数 > f <- function(x, y, ...) sys.call() > f(y = 1, 2, z = 3, 4) “2”がxに割り当てられている のがわかりにくい f(y = 1, 2, z = 3, 4) > f <- function(x, y, ...) match.call() “2”がxに割り当てられている > f(y = 1, 2, z = 3, 4) のがわかりやすい f(x = 2, y = 1, z = 3, 4) ※返り値は 両方共Call Object 24
25.
6.5 Manipulation of
function calls > y <- 10.5 > (e <- call("round", y)) call関数でcall objectを 生成&評価 round(10.5) > eval(e) [1] 10 > > x <- list(x = 1:5, y = 101:105, z = 1001:1005) do.call関数で > do.call("rbind", x) 引数のリストを [,1] [,2] [,3] [,4] [,5] 全て”rbind”関数 x 1 2 3 4 5 で結合し行列化 y 101 102 103 104 105 z 1001 1002 1003 1004 1005 25
26.
6.6 Manipulation of
functions • 関数・クロージャーを操作する関数が存在 1. body:関数の中身(expression)を返却 2. formals:関数の引数を返却 3. environment:関数の環境を返却 • 関数⇔リストの相互変換 – as.list: 関数 ⇒ リスト – as.function:リスト ⇒ 関数 26
27.
6.6 Manipulation of
functions > f.original <- function(x){x + a} > formals(f) > f <- f.original 例として $x > f(3) 使う関数 > environment(f) 以下にエラー f(3) : オブ <environment: R_GlobalEnv> ジェクト ‘a’ がありません > body(f) <- quote(5^x) > body(f) > #body(f) <- expression(5^x) { >f x+a function (x) } 5^x 関数の中身 を変更できる 27
28.
6.6 Manipulation of
functions 変更された関数 3(x) + 10(a) = 13 > f(3) 5^3 = 125として評価 f(3) > と評価される [1] 125 [1] 13 > > > f <- f.original > f <- f.original > formals(f) <- alist(x = , a = 10) > as.list(f) >f $x function (x, a = 10) [[2]] { { x+a x+a alist(の結果)をformalsに } 入れることで外から束縛 } ※alistはうまいこと”型”を割り振った”list”を作ってくれる関数 28
29.
6.6 Manipulation of
functions > as.function(as.list(f)) function (x) 関数をリスト化した後、 { 再関数化で元通り x+a } > > f <- as.function(alist(x = ,y = 2,x + y)) > f(3) [1] 5 alistで作成したlistを関数化 29
Jetzt herunterladen