tidyverse
与えるだけでよい。
支配されるという
特権をだ!

@yutannihilation

ドーモ!

Hiroaki Yutani

タイトルについての補足

名作SRPG「タクティクスオウガ」で、聖騎士ランスロットと暗黒騎士ランスロットが対面する名シーン。 あくまで民衆の力を信じようとする聖騎士に対し、暗黒騎士は「民に自分の夢を求めてはならない」と切り捨て、支配者の論理を叩きつけるのだった――。 「我々が乱れた世を正そうではないか。秩序ある世界にしてやろう」という暗黒騎士の暗い正義が端的に表現された名台詞として語り継がれている。

タイトルについての補足

そんな不朽の名作タクティクスオウガが、

2022年11月11日に!!!

リメイク版になって発売されたーー!!!!

みんな買いましょう!!!!!!!

タイトルについての補足

(これで今日言いたいことの5割が終わった)

今日言いたいことの残り5割

  • tidyverseは以前ほどエキサイティングではなくなってしまった(!)

もうちょっと自己紹介

  • 2018年末からggplot2のメンテナ
  • 他のtidyverseのパッケージ群にもたまにコントリビュート
  • 「RユーザのためのRStudio[実践]入門」(技術評論社)のdplyr・tidyrの章を執筆

→ そこそこtidyverseと関わりがある

そこそこ関わりがあるので言っておきたいこと

※この発表は個人の見解であり、
 所属組織を代表するものではありません!

tidyverseの開発の特殊な点

  • 機能というより、新しい言語をつくっていくみたいなところがある
  • Posit(旧RStudio)社という一企業が意思決定を握っている

新しい言語をつくる

新しい文法を作った例:|>

  • 2014年2月:
    %>%(magrittrパッケージ)がCRANに
  • 2014年5月:
    dplyrパッケージが%>%を使い始める
  • 2021年4月:
    R 4.1に|>が入る

「grammar of ~」って言いがち

  • ggplot2: “A Grammar of Graphics”
  • dplyr: “A Grammar of Data Manipulation”
  • tidymodels:
    • infer: “a grammar for statistical inference”

tidyeval, data masking, etc…

あんな書き方やこんな書き方、あったなあ…

data |> 
  mutate(
    x_from_env = !!x,
    x_from_env2 = {{ x }},
    x_from_data = .data$x,
    {{ col_name }} := foo,
    "{col_name}_2" := bar,
    !!!other_cols,
    ...
  )

tidy selection

あんな書き方やこんな書き方、あったなあ…

data |>
  select(
    1:3,
    "a",
    any_of(b),
    all_of(c),
    starts_with("foo"),
    ...
  )

lazyeval

もはや何も思い出せないけど、あったなあ…

R7

新しいオブジェクト指向システム(これはtidyverseではないけど)

https://rconsortium.github.io/OOP-WG/

そもそもR自体がメタプログラミング向き、という説

Joe Cheng氏(Posit社CTO、Shiny作者)
「RはDSLではなく、DSLをつくる言語だ」

新しい言語が生まれ続けてるの、どうなの?

開発者としての感想

  • 新たな文法が次々に生まれていくエキサイティングな世界
  • プログラミングの様々な概念について学ぶことになって面白い
  • 常にどこかしらぶっ壊れてるので、関わりがいがある(特に日本語関連)

ユーザーとしての感想

  • 昨日書いたコードが今日はもう動かなくてつらい
    1. 仕様変更のせい
    2. バグのせい
  • 動かなくはないけど、最新のおすすめの書き方どれなの? ()

…でも、最近そうでもなくない?

lifecycle

  • stable: 安心して使ってください、という完成された状態
  • experimental: いい感じだと信じてるけど、なんか落とし穴があるかも、という状態
  • deprecated: いずれ消されるのでおすすめじゃない状態
  • superseded: 消されはしないけどおすすめじゃない状態

lifecycle

  • 最近なんかsupersededが選ばれがちな気がする
  • 「deprecatedだけどこれは消せねえな…」というコメントすら見かける(deprecatedとは…?)

deprecatedの現実

gather()/spread()みたいな関数はもう使われ過ぎててdeprecateできないっすわ!」

個人的に衝撃的だった issue

個人的に衝撃的だった issue

  • 理論上where()なしでもいけんじゃね?、というissueだった
  • where()がベストな文法だから」ではなく、「変更すると影響が大きすぎる」ことを理由にクローズされている

→ dplyrは文法革命の最前線だったけど、けっこう保守的になってる??

stableになっていくパッケージたち

バージョン1.0のリリース

= 安定版に達した

  • ggplot2: 2014年5月
  • tidyr: 2019年9月
  • dplyr: 2020年5月
  • tidymodels: 2022年7月
  • purrr: もうすぐ

stableになるとはどういうことなのか

  • 安定している
  • 何かあってももう変えられない

変えられないものを
変えてしまった悲劇
の実例

謎挙動について問い合わせ

若かりし頃のユタニ氏「ggplot2でalphaが線に影響しない謎挙動、直りませんか?」

謎挙動

線が半透明にならないのおかしくない?

ggplot(diamonds, aes(carat)) +
  geom_density(
    fill = "red", colour = "red",
    linewidth = 3.0, alpha = 0.1
  )

Hadley「たしかに!」

alphaが線にも影響するようになった!

何もしてないのに壊れた!

既存のコードが期待と違う結果になるので困る、というクレームが多数で、リバート…

滂沱するユタニ氏

ご迷惑をおかけした方すみません…

悲劇まとめ

  • alphaが線に影響しないのは直感に反する(これは今でもそう思う)
  • しかし、ggplot2は、何かを大きく変更するにはもう広く使われ過ぎている
  • 理想と現実のはざまで、悩みながら生きていくしかない

One more thing…

tidyverseの開発の特殊な点

  • 機能というより、新しい言語をつくっていくみたいなところがある
  • Posit(旧RStudio)社という一企業が意思決定を握っている (こっちの話をしたい)

大事なことはPosit社内で決まってる(気がする)

  • ぶっ飛んだbreaking changeはだいたい突然出てくる
  • ただ、思い付きで言ってるわけではなくて、Posit社内である程度議論してるっぽい
  • もちろん、Rコミュニティの信頼を得るのがPosit社の生命線なので、フィードバックは集める

フィードバックの仕組み

tidyups

  • 重要な変更を加えるときは、変更をドキュメントにまとめてtidyverseに縁のある社外の開発者に意見を募る
  • 今のところ、dplyrのarrange()の順序を変更する時とかにこれが使われた

フィードバックの仕組み

ということで仕組みはあるけど、

  • 現実には、プロセスがめんどくさくてあまり機能してない気がする(単に議論すべきbreaking changeがなかった、という可能性もある)
  • 公に議論すると揉めそうなものはどのみちここには入れられなさそう

まあ、わかる

  • 意見が割れそうなトピックについて、雑に議論を始めてしまうと収拾がつかなくなる
  • breaking change については、公の場で検討するだけでコミュニティを不安にしてしまう
  • コミュニティで決めた結果が失敗だった時、言い出した人が非難される危険がある

→ Positがある程度クローズドにものごとを決めてくのは、必要悪みたいな面はある

なので…

「支配者は与えるだけでよい。支配されるという特権をだ!」
「我々が乱れた世を正そうではないか。秩序ある(tidyな)世界にしてやろう」

(正直、正解はよくわかりません…)

支配されるという特権

  • 「tidyverseは秩序だっていて美しい」と感じるのは、Posit社の天才エンジニアたちがよく考えて決めている、ということと無縁ではない
  • それは時にbreaking changeという痛みを世界にもたらしてきた
  • でも、民意で方針がコロコロ変わる、ということはない

支配されるという特権、
使ってこ?

tidyverseはもはや「理想を追い求める最先端のパッケージ」ではない。

  • 「信頼と安心のtidyverseさえ使っておけば安心」
  • 「今日書いたコードがずっと動く」
  • みんな支配されたいんでしょ?

一方、開発者は?

  • tidyverseの開発は、一番おもしろい時期はもう終わってしまった
  • 歴史を踏まえつつ、様々な制約を考慮して、針の穴を通すようにして解決策を組み立てる技術力が求められる
  • (それはそれで面白い)

もしかして

RStudio社が社名を変えたのも、Rの「言語」としての進化がそろそろサチってるから?

ただし

  • Hadleyが動画で言ってるように、Rの「コミュニティ」の可能性はまだまだある
  • Posit社の開発者はいろいろ他の言語に挑戦してる
    • Python (Shiny, vetiver)
    • Typescript (Quarto)
    • Rust

まとめ

今日言いたかったこと(再掲)

  • tidyverseは以前ほどエキサイティングではなくなってしまった

ユーザーの方へ

  • 「昨日書いたコードが今日はもう動かなくてつらい」みたいなことは最近はあまりないよ! 安心して使っていきましょう!

開発者の方へ

  • tidyverseはわりと成熟してしまった。新しいことをやりたいならここじゃないかも。
    • コントリビュートの余地はまだまだある
    • メインが身動きとれない分、拡張パッケージは活躍できるよ!
  • とはいえ、Rのコミュニティにはまだまだ面白いことがあるはず。新しいフロンティアを探していきましょう!

追記:個人的に気になってる新しいフロンティア

Enjoy!