select 関数の記事でも少し触れましたが、 tidyverse パッケージを用いた R では、シェルスクリプトのようなパイプの処理が可能です。具体的には、 %>%
という演算子を用います。
オブジェクト %>% 関数(引数2)
演算子の左側に書かれたオブジェクトが、演算子の右側の関数の引数に用いられます。例えば、次のような表現が可能です。
result_data %>% select(Symbol, Sample1)
上記では、result_data を select() 関数の最初の引数として渡しています。つまり、下記の表現と同義です。
select(result_data, Symbol, Smple1)
パイプ %>%
を使った表現の何がメリットかというと、処理結果を連続して渡せることです。よって、下記のような表現が可能です。
result_data %>% select(Symbol, Sample1) %>% filter(Sample1 > 1)
これで、select関数で列を選択したのち、filter関数で行を選択するという作業を続けて書けます。途中で改行を挟んでも良いので、コードも読みやすくなります。
result_data <- input_data %>%
inner_join(meta_data) %>%
select(Symbol, Sample1) %>%
filter(Sample > 1)
上記のように続けて書くと、「inner_join で結合したのち、select で列を選択し、filter で行を選択した結果が result_data に入る」という意味になります。
もし、パイプを使わなかったら、下記のような表現になるでしょう。
result_data <- inner_join(result_data, meta_data)
result_data <- select(result_data, Symbol, Sample1)
result_data <- filter(result_data, Sample > 1)
# もしくは、無理やり1行で、、、
result_data <- filter(select(inner_join(input_data, meta_data), Symbol, Sample1), Sample1 > 1)
同じ変数に代入し続けたり、ネストを深くする書き方は、避けたほうが無難です。後でコードを見返したときに分かりにくくなるためです。コーディングのミスや、デバッグ時の手間の増加につながります。