Rがときめく
型付けの魔法

Tokyo.R #77

@igjit

片づけ

片づけ

型付け

Rの型検査を実装した話をします。

Rは動的型付け言語

型に関する間違いは実行時に見つかる

year <- "2018"

# すごく時間がかかる処理
do_something(year)

year + 1

実行すると、すごく時間が経ってから

 year + 1 でエラー:  二項演算子の引数が数値ではありません

かなしい

実行前に教えてほしい

ところで最近こんな本を読んだ

最後の章に型推論のアルゴリズムが書いてあった。

Rで実装してみた。

typrr

https://github.com/igjit/typrr

インストール

devtools::install_github("igjit/typrr")

あそびかた

Rのコードを

# foo.R
n <- 1
n + "abc"

静的型検査

> typrr::type_check("foo.R")
$line
[1] 3

$column
[1] 1

$message
[1] "type error"

型エラーの箇所がわかる

わかりづらいので

Emacs(Flycheck)の拡張を実装

(ちなみに、RStudio以外だとESS (Emacs Speaks Statistics)が良いよ、ってHadleyも言ってる。)

コードを書いてる最中に型エラーがわかる

関数呼び出し時の型エラー

関数の戻り値に関する型エラー

demo

お詫び

今のところ

実用性は全く無い

対応している構文要素は少ない

  • 基本型
    • integer, double, logical, character
  • 代入演算子
  • 関数定義
    • 引数が1つのもののみ
  • 関数呼び出し

単に作るのが楽しいから作っている。

人は、読むことではなく、することによって学習するのである。

RStudioではじめるRプログラミング入門

Enjoy!