💮もっと自然に完了通知
昨日書いた記事に対して、ナイスなコメントをいただいた。
時間かかる処理でフックと組み合わせると良さそうhttp://t.co/CmPaUNqyXi
— sinhrks (@sinhrks) September 22, 2015
これができるようになれば、いちいち通知用の関数を記述しなくても通知が飛ぶようになって素敵になる。プレッシャーも感じつつ、調べてみたのでメモ。
上記の記事で参照されている記事を辿る...
...ちょっとよくわからん。見よう見真似してみる。
関数の用意
詳細は昨日の記事で
devtools::source_gist("9c419af5547fde20d2a7") ## notify(msg = "完了した際のコメント")
hookを利用する
plotする度にヌマクローを表示させるというもの。
setNumacraw <- function(){ .LastuserHook <<- getHook("plot.new") setHook("plot.new", numacraw, "append") setHook("plot.new", notify, "append") } setNumacraw() plot(1) plot(1)
関数に細工を施す
こちらは関数に直接編集して、関数による出力が行われる前に任意の処理を加える方法。
ゴミ箱さんの記事では検定をして有意だった場合に「有意差でたよっ(yeah::detayo()
)」が実行されるようにしていたが、人がいる環境でyeah::detayo()
は恥ずかしい。声がなくて寂しいが、通知で我慢しよう。
yeah::detayo()
の部分をnotify()
に変更すれば良く、関数の中身さえわかってしまえば他の関数にも応用できる(同じ方法でできる)
ggplot2
{ggplot2}
にも対応させた。
Pipeline
{magrittr
}によるpipe処理ではちょっと変わる。
mtcars %>% dplyr::select(mpg, cyl, disp) %>% dplyr::mutate(disp2 = disp / 2) %>% head() %>% { notify("fin") return(.) }
もっと簡単に利用できるよう、関数を定義してみる。
pipe.notify <- function (x, msg) { x %>% { notify(msg = msg) return(.) } }
mtcars %>% dplyr::select(mpg, cyl, disp) %>% dplyr::mutate(disp2 = disp / 2) %>% head() %>% pipe.notify(msg = "おわた") pipe.notify(mtcars %>% dplyr::select(mpg, cyl, disp) %>% dplyr::mutate(disp2 = disp / 2) %>% head(), msg = "fin")
Enjoy!