⚡️関数の実行結果を知らせる関数(パッケージ)を作っています
source()
でガーッとコードを実行させる時やforeach::foreach()
などでループ処理をする時、モデリングのような処理に時間のかかる関数を実行すると、終わったかな、まだやっているかなとチラチラとコンソールを確認するのが結構面倒臭い。せっかちなので頻繁に見てしまう。そんな私のための、関数の実行が終了したら通知する関数を書きました。パッケージとしてGitHubに公開しているので、後述の方法でインストールすれば利用可能です。
まずはこちらをご覧ください。
このgifは下記のコードの実行結果を記録したものです。
library(roracle) notice_status(head(iris)) head(iris) %>% notice_status(msg = "実行完了") notice_status(warning("警告の際には出力が変更されます")) notice_status(print(エラーとなるコードを実行するとそれを通知します)) notice_overtime(1 + 1) notice_overtime(for(i in 1:1e7) sqrt(1:10))
インストール
{roracle}
というパッケージを利用することで上のような通知が可能になります。下記のコードを実行すればGitHubからインストールされます(さっきGitHubにあげたのでGepuro Task Viewsに登録されていないはず)。
install.packages("devtools") install_github("uribo/roracle")
通知のためにnotiというツールをインストールしておく必要があります。これが{roracle}
の味噌となります(つまり私自身は大したことをしていない!!)
notiはOSを問わずに利用できます。
使い方
{roracle}
の関数を紹介します。といっても、現在は2つの関数しかありません。コードの実行結果を通知するnotice_status()
と処理時間の長いコードの終了を知らせるnotice_overtime()
です。
それぞれ詳しく見ていきます。
notice_status()
では、第一引数に与えたコードが実行されると通知をします。%>%
によるパイプ処理をしても良いです。msgという引数を持っていて、これを変更すると通知のメッセージを変えられます。またそのうち音声読み上げさせたいと思っています。
また先の例のように、コード実行結果にWarningやMessage、Errorがあった場合にはその旨を通知します。
notice_status(head(iris))
notice_overtime()
は実行時間が規定以上になったものに対して、実行完了時に通知を行います。s処理時間の長い関数の実行に追加しておくと、終了したことを確認できて捗ります。
これで一つの画面を見続けている必要がなくなりました。
Enjoy!
この関数を書いた背景として以前の記事があります。
ただこれだとMacでしか動かなかったり、パッケージ化されていないので使いにくい、ということがありました。個人的には満足できるものができたと思います。CRANにあげる気はありません。関数を使わず、もっと自然に通知させたいなと思っていますが、それはまた今度。
また、同様のことをしようとしている人がいます。metacranおじさん(Mango Solutionsの人)もなかなかの変態です。いつもありがとう!!