R にラムダ式を導入するパッケージ lambdaR を作った
来源:互联网 发布:一号店在线客服软件 编辑:程序博客网 时间:2024/06/06 01:13
R にラムダ式を導入するパッケージ lambdaR を作った
※この記事は R Advent Calendar 2014 - Qiita の 4 日目の記事です。
いくつかのプログラミング言語には、無名関数を生成する方法として、ラムダ式が用意されています。
例えば、
などです。
ラムダ式は、無名関数をダイレクトに表現することができるため、プログラムの記述が容易になり、可読性も上がります。
ところが、R にはラムダ式はありません。
このように便利なラムダ式を R に導入できないでしょうか?
というわけで、作りました。
- lambdaR - Novel lambda expressions in R
lambdaR は、R にラムダ式を導入するためのパッケージです。
次のようにしてインストールできます。
このパッケージで定義される lambda() は、ラムダ式を関数に変換する関数です。
ラムダ式は、上記のように、 や のように、Python ライクに記述します。
この lambda() 関数を使うことにより、ラムダ式を入力として持つ高階関数(関数を入力として持つ関数)を作ることができるようになります。
lambdaR パッケージでは、適用例として、このようなラムダ式を入力として持つ高階関数が 6 つ定義されています。
- Filter_()
- Map_()
- Reduce_()
- Find_()
- Position_()
- Negate_()
これらの関数の詳細については、下記サイトを参考にして下さい。
- Higher Order Functions in R
- R: Common Higher-Order Functions in Functional Programming...
これらの関数だけでなく、関数を入力とする関数ならば、ラムダ式を入力としたものとして再定義することができます。
例えば、Filter_() は、入力されたベクトルのうち、ラムダ式で指定された関数がTRUE を返す値のみを返します。
また、Map_() は、入力されたベクトルのそれぞれの値に対して、関数を適用したベクトルを生成します。
このような関数と dplyr のパイプ演算子 %>% を組み合わせると、次のように書くことができます。
普通に書いた場合との記述量、可読性を比べてみてください。
ラムダ式を使うと、このような記述がすっきりすることがわかると思います。
プレースホルダ
lambdaR では、Scala で使えるプレースホルダを使うこともできます。
プレースホルダにより、より簡潔にラムダ式を記述することができます。
まとめ
lambdaR パッケージにより、R においてラムダ式への道が開けました。
より詳しい使い方については、下記ページを参照して下さい。
- R にラムダ式を導入する
- R のラムダ式でプレースホルダを使えるようにする
- lambdaR - Novel lambda expressions in R
以上です。
- R にラムダ式を導入するパッケージ lambdaR を作った
- Microsoft Script Editorを使ったIEで動作しているJavaScriptをデバックする方法
- 应届生入职工作安排
- 入坑R-N
- LinuxサーバへTomcat 7.xを導入し、自動起動するように設定する。
- スマホの文字入力は何派?ケータイ打ち・フリック入力・QWERTY入力を選ぶ理由
- 日经社説 20150110 膨張する医療費の抑制に本腰を入れよ
- GitHubに複数のアカウントを作ってひとつの端末から操作する
- [Windows][BlackJumboDog]メールサーバを作ってみました
- Excelの数式を入力
- 3.SQL文を作る(employee.csを新規する)
- Javassist -- Java バイトコードを操作するクラスライブラリ -- 入門
- 音声でパソコンにキーワードを入力すると録画したテレビ番組などからキーワードに関連した場面を検索できるシステムが、茨城県つくば市にある研究所で開発されました。
- CSV出力ボタンラッパー(asp.net)[イベントの作り方に役立つ]
- 見積もりがブレるメカニズム--標準技法には落とし穴がある 穴をふさぐ現場ルールを作ろう
- 社説 20141224 大学入試改革 山積する課題を克服できるか
- 社説 20150828 大学入試改革 思考力を判定できるテストに
- 入門 17 - 實作equals和hashCode
- (转载)新入职的程序员如何避免痛苦和迷茫?
- 【shader】Unity3D地形
- Qt4转Qt5遇到的问题
- “纯粹”的面向对象程序设计方法是什么样的
- LeetCode 38 Count and Say(计数与报数)
- R にラムダ式を導入するパッケージ lambdaR を作った
- linux oracle 创建表空间,用户,赋权限
- java调用.net webservice
- ios Crash闪退日志获取和上传至服务器
- linux命令学习(2):cd命令(切换当前目录)
- 10023---Eclipse设置保存时自动给变量加final
- MyAdapter
- 深入浅出UML类图
- xCODE7.1进行网络访问的设置