いろいろ倉庫

KNIME、EXCEL、R、Pythonなどの備忘録

【R】パイプ演算子を学びたい

・お題:パイプ演算子というやつを使うと、分かりやすいコードが書けるらしい。どんなものか、体験してみたい。

 

・先日Tidyverseを調べた際に、dplyrパッケージのチートシートpipesという記述があった(以下)。

github.com

pipesは日本語でパイプ演算子と呼ばれるらしく、使いこなすと便利らしい。以下のサイトを参考に、ちょっと試してみたい。

qiita.com

 

・まず、%>%という入力がめんどくさい。先のサイトに、以下の記述があった。私はwinなので、Ctrl + Shift + mでいけた。

・適当に試してみる。1から10までの数を含むベクトルを作って、その成分を足し算したい。

> library(tidyverse)
> data<-1:10
> data
 [1]  1  2  3  4  5  6  7  8  9 10
> sum(data)#いつもの書き方だとこんな感じ。
[1] 55
> data %>% sum()#パイプ演算子を使うとこんな感じ。%>%の前のオブジェクトが、後の関数の引数として扱われる。
[1] 55

・なんとなく、Pythonでオブジェクトのメソッドにアクセスする際のドットと似たようなイメージで行けそう。

・複数の引数を用いる関数の場合はどうなるか?function関数で2つ引数を持つ関数を作って試してみた。

> f<-function(a,b) a-b#aとbを引数に与えると、aからbを引き算してくれる関数をfと定義。

> data2<-5

> data2 %>% f(3)#fにはパイプ演算子でdata2を第1引数として、直接引数として3を第2引数として渡した。
[1] 2

・ということで、5-3で2が返ってきた。パイプ演算子で繋ぐと、第1引数として渡されるらしい。設定した関数の第2引数に初期値を与えておけば、引数を指定しない場合は初期値が代入されるので、引数なしで計算できる。

> f2<-function(a,b=10) a-b
> data2 %>% f2()
[1] -5

 

・パイプ演算子の何が便利かというと、処理を繋げて順番に見ることができる点なんだろうと思う。

・例えば、あるデータフレームから特定の列を抜き出してその平均値を算出し、何らかの回帰式に放り込んで数字を出す、などの処理がある場合、順繰りにパイプ演算子を使えば処理を追っていける。

・データフレームを作成する。

> SampleID<-c("20230101_A","20230101_B","20230101_C")
> Data_Value<-c(18,22,19)
> Data_Unit<-c("uM","uM","uM")
> df<-data.frame(SampleID,
+                Data_Value,
+                Data_Unit)
> View(df)

・何らかの回帰式は、例えばf(x)=5*x-6にしてみる。

・式を全部ネストすると以下のような感じ。書くのが面倒だし、なんだか分かりにくい。。

> 5*mean(df$Data_Value)-6
[1] 92.33333

・次に、パイプ演算子を使ってみる。回帰式をfuncで定義する。

> func<-function(x) 5*x-6

> df$Data_Value %>% mean() %>% func()
[1] 92.33333

 

 

・慣れればとても便利そう。

 

おわり。