RでF#のパイプ演算子
2014/03/26追記
magrittrパッケージに以下で書いてるようなパイプ演算子があります。
下でやってることよりもっとちゃんとつくってあるので、
unaryとか必要ないです。
> 1:3 %>% sort(dec=T) [1] 3 2 1
追記ここまで
Rは演算子の定義ができるので、F#のパイプ演算子っぽいものが作れる。
> "%>%" <- function(x, f) f(x) > 3:1 %>% sort [1] 1 2 3
ついでに任意の関数を1引数関数に変換するunaryってのも作っておくと色々と捗るかもしれない。
> unary <- function(f, ...) function(x) f(x, ...) > 1:3 %>% unary(sort, dec=T) [1] 3 2 1
あと、Rは->演算子で左から右への代入ができるので、パイプ演算子と組合せると非常に美しい感じ。
> # ソートしてlogをとって変数xに代入 > 3:1 %>% sort %>% log -> x > x [1] 0.0000000 0.6931472 1.0986123
ただし注意点として、複数行に渡る式を書く時は、演算子を行末に置く必要がある。
> # 3:1 %>% sort > # %>% log > # とやろうとすると、1行目で式が評価されちゃう > 3:1 %>% sort [1] 1 2 3 > # パイプ演算子は行末に置く必要がある > 3:1 %>% + sort %>% + log [1] 0.0000000 0.6931472 1.0986123