1. 趣旨
最近パイプ演算子を知った私でございますが、某テキストで「もちろん皆さんご存じの」のテンションで突然湧いてきた「Tee演算子」。こいつは何なんだ。
という、R超初心者の僕個人向け、超絶基礎的レファレンス。
2. パイプ演算子の仲間
どうやらこのTee演算子、パイプ演算子の仲間らしい。
なので、パイプ演算子のことを知らないと何言ってるのかわからない。
(一応パイプ演算子について)パイプ演算子 - Qiita
3. Tee演算子「%T>%」
クリアな説明は難しいが、こちらの記事ではこのように紹介されている。
これは%>%のように機能するが、右辺の結果を返す代わりに左辺の結果をそのまま返すという特徴がある
んんんんんーーー難しい。
あたまのわるい僕向けの説明としては、ようは「寄り道」させる演算子。
3-1. 前提
パイプ演算子と同様に、コイツもRで標準で使える演算子ではないらしい。
そして、パイプ演算子を使う場合はdplyrを使ったが、Tee演算子を使う場合はmagrittrというパッケージが必要になる。
library(magrittr)
3-2. Ex.
sum(1:10) %T>% plot() %>% sum(., 100) %>% print()
[1] 155
# print()の出力結果と同時に、sum(1:10)のプロット図が表示される
おわかりいただけただろうか。
これを分解すると、こういうことになる。
# 寄り道
sum(1:10) %>% plot()
# 本流の計算過程
sum(1:10) %>% sum(., 100) %>% print()
結局、plot()
に一旦寄り道するけど、一つ手前の関数sum(1:10)
の出力結果をその次の関数sum(., 100)
のオブジェクトとして引き渡している。
つまり、本流の計算は二行目の式であり、Tee演算子に続く関数plot()
は、本流の計算には影響させないということ、らしい。
これが寄り道の具体的中身。
3-2-1. ちなみに
この「T」一文字を抜かすと、出力結果が全く異なる。
> sum(1:10) %>% plot() %>% sum(., 100) %>% print()
[1] 100
# print()の出力結果と同時に、sum(1:10)のプロット図が表示される
plot()
はあくまで図表を描写する関数なので、それ自体が出力するオブジェクトは空(NULL)になる。そのため、sum(., 100)
の出力結果は0+100=100となるので、print()
の出力結果も100になる。
つまり、普通のパイプ演算子だと、本当は本流の計算に影響させたくない部分も本流の一部を構成してしまう。その結果、本流の計算結果にも影響を与えてしまった。
これを避けるためにも、Tee演算子が必要だということになる。
3-3. 活用
Tee演算子の後には、だいたいprint()
やplot()
が来ることが多いらしい。
これによって、計算全体に影響を与えることなく、計算の途中過程をアウトプットすることができる。
4. まとめ
パイプ演算子を使って記述しているときにTee演算子を使うと、全体の計算に影響を与えることなく途中の計算結果を表示したりプロットしたりすることが可能になる。ということでしょう。多分。
5. イメージ
「%T>%」は浮気の演算子。
結婚発表直後に浮気疑惑をフライデーされるも、その後の新婚生活にもメディア出演にはほとんど影響がなかった、オードリー春日Tをイメージすればよい。
> m_1_grandprix(kasuga) %>% marriage() %T>% friday() %>% tv_ranking(., 2019)
[1] 398本
余計にわかりづらいか。