R base的內建pipeline

黃天原

2020/12/12

今天意外看到R core team也有在開發它們自己內建的pipeline,嚇得我趕緊下載了R的dev版本。R base版本的pipeline,長成|>這附模樣,可以看到像下面那篇twitter的例子。 1

#RStats community, really? It's been like 5 hours now and no one noticed the big news? 😛https://t.co/c4OXTO0WCw

Thank you @LukeTierney4 @_lionelhenry @jimhester_ (who else?)#pipypipy pic.twitter.com/5P9QPe1H8a

— Henrik Bengtsson (@henrikbengtsson) December 4, 2020

裝好R-dev版本之後,我很快的找了關於|>的help document來看看。 R-pipeline-help R-pipeline-example 文檔大致上長得如此,這個內建pipe的方法,就跟熟悉的%>%一樣,例如:

> mtcars |> subset(cyl == 4) |> subset(select = mpg)
> 
                mpg
Datsun 710     22.8
Merc 240D      24.4
Merc 230       22.8
Fiat 128       32.4
Honda Civic    30.4
Toyota Corolla 33.9
Toyota Corona  21.5
Fiat X1-9      27.3
Porsche 914-2  26.0
Lotus Europa   30.4
Volvo 142E     21.4

就可以得到選出來的結果,看看cyl是4的車子,它的mpg是多少。其效果跟{dplyr}filter()select()一樣,只是現在全部都能用內建的函數完成。

另外,它也能讓pipeline直接進到function裡面,像是下面這樣

> mtcars |> subset(cyl == 4) |> \(d) lm(mpg ~ disp, data = d)

Call:
lm(formula = mpg ~ disp, data = d)

Coefficients:
(Intercept)         disp  
    40.8720      -0.1351 

把選好的data.frame放進一個可以生成model的function裡面,效果跟 mtcars |> subset(cyl == 4) |> function(d) lm(mpg ~ disp, data = d)

一樣。

總結來說,R core team開發這個內建的水管,真是個酷東西。


  1. 因為在內嵌html的時候遇到一些困難,Hugo有問題,所以附上解決方案https://stackoverflow.com/questions/63198652/hugo-shortcode-ignored-saying-raw-html-omitted↩︎

Categories: programming Tags: R 乾貨