85  パイプ関数(演習)

練習:パイプ関数をキーボードショートカットを利用して10回入力してください。

windows:ctrl + shift + m mac: cmd + shift + m

このショートカット、無意識で入力できるようになるくらい、習熟しておいてください。

質問:次の処理をパイプ関数を利用してかいてみてください 。

library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.2     ✔ readr     2.1.4
✔ forcats   1.0.0     ✔ stringr   1.5.0
✔ ggplot2   3.4.2     ✔ tibble    3.2.1
✔ lubridate 1.9.2     ✔ tidyr     1.3.0
✔ purrr     1.0.1     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors

1

summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       Species  
 setosa    :50  
 versicolor:50  
 virginica :50  
                
                
                

2

summary(iris$Species)
    setosa versicolor  virginica 
        50         50         50 

3

as.character(sum(c(1,2,3,4,5)))
[1] "15"

できましたか?

1

summary(iris)
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       Species  
 setosa    :50  
 versicolor:50  
 virginica :50  
                
                
                
iris %>% summary()
  Sepal.Length    Sepal.Width     Petal.Length    Petal.Width   
 Min.   :4.300   Min.   :2.000   Min.   :1.000   Min.   :0.100  
 1st Qu.:5.100   1st Qu.:2.800   1st Qu.:1.600   1st Qu.:0.300  
 Median :5.800   Median :3.000   Median :4.350   Median :1.300  
 Mean   :5.843   Mean   :3.057   Mean   :3.758   Mean   :1.199  
 3rd Qu.:6.400   3rd Qu.:3.300   3rd Qu.:5.100   3rd Qu.:1.800  
 Max.   :7.900   Max.   :4.400   Max.   :6.900   Max.   :2.500  
       Species  
 setosa    :50  
 versicolor:50  
 virginica :50  
                
                
                

2

summary(iris$Species)
    setosa versicolor  virginica 
        50         50         50 
iris$Species %>% summary() #これとか、
    setosa versicolor  virginica 
        50         50         50 
iris %>% .$Species %>% summary() 
    setosa versicolor  virginica 
        50         50         50 
  #こんな風にも書けます
  #
iris %>% {.$Species} %>% summary() 
    setosa versicolor  virginica 
        50         50         50 
    #{}でくくると見やすくてよいかもしれません。

3

as.character(sum(c(1,2,3,4,5)))
[1] "15"
c(1,2,3,4,5) %>% 
  sum(.) %>% 
  as.character(.)
[1] "15"
  #基本の書き方はこうです。

ただし、実はアーギュメントが1個だけの場合、(.)を省いても動くので、

c(1,2,3,4,5) %>% sum %>% as.character
[1] "15"

でもOKです。ついでに、c(1,2,3,4,5)は1:5と書いてもOKなので、

c(1,2,3,4,5)
[1] 1 2 3 4 5
1:5
[1] 1 2 3 4 5
1:5 %>% sum %>% as.character
[1] "15"

とものすごく短くもできます。