関数の lifecycle 変化の管理

lifecycle パッケージは、非推奨の関数について警告を表示します。 非推奨の関数は将来のリリースで削除されるので、警告を見たらすぐに削除するのが良い方法です。

例えば、あなたのコードが tibble::data_frame() を使っているとします。この関数はバージョン 1.1.0 で非推奨となり、 tibble() に置き換わりました。 data_frame() は現在、次のような感じになっています。

data_frame <- function(...) {
  lifecycle::deprecate_warn("1.1.0", "data_frame()", "tibble()")
  tibble::tibble(...)
}

つまり、自分のコードで data_frame() を使うと、警告が出るということです。

df1 <- data_frame(x = 1, y = 2)
#> Warning: `data_frame()` was deprecated in tibble 1.1.0.
#> Please use `tibble()` instead.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
#> This warning is displayed once every 8 hours.
#> Call `lifecycle::last_lifecycle_warnings()` to see where this warning was generated.
df2 <- data_frame(a = "apple", b = "banana")

警告は最初に呼び出したときだけ表示されることに気づくでしょう。lifecycle は8時間ごとに通知するだけなので、非推奨の関数を多くの場所で使っていたとしても、過度に混乱することはないのです。

では、警告がどこから来たのかを正確に追跡するにはどうしたらいいのでしょうか。 まず、非推奨の警告メッセージに lifecycle::last_lifecycle_warnings() を呼び出すようにというアドバイスが含まれていることに気づいていたでしょうか。 これは最近発生した非推奨の警告をすべてリストアップしてくれます。

lifecycle::last_lifecycle_warnings()
#> [[1]]
#> <deprecated>
#> message: `data_frame()` was deprecated in tibble 1.1.0.
#> Please use `tibble()` instead.
#> Backtrace:
#>  1. global::data_frame(x = 1)

各警告には、非推奨関数につながる一連の呼び出しを示すバックトレースが付属しています。

また、非推奨の関数の使用をすべて突き止めるのに時間をかけたい場合は、 lifecycle_verbosity オプションを使用すると、非推奨の関数に対して毎回警告を出すようにすることができます。

options(lifecycle_verbosity = "warning")
df1 <- data_frame(x = 1, y = 2)
#> Warning: `data_frame()` was deprecated in tibble 1.1.0.
#> Please use `tibble()` instead.
df2 <- data_frame(a = "apple", b = "banana")
#> Warning: `data_frame()` was deprecated in tibble 1.1.0.
#> Please use `tibble()` instead.

そして、 lifecycle::last_lifecycle_warnings() を使ってソースを突き止めます。

あるいは、本当に厳密にやりたいのであれば、非推奨の警告をすべてエラーにして、すぐに対処するように強制することもできます。

options("lifecycle_verbosity" = "error")
df1 <- data_frame(x = 1, y = 2)
#> Error: `data_frame()` was deprecated in tibble 1.1.0.
#> Please use `tibble()` instead.