cucumber flesh

Rを中心としたデータ分析・統計解析らへんの話題をしていくだけ

💮もっと自然に完了通知

昨日書いた記事に対して、ナイスなコメントをいただいた。

これができるようになれば、いちいち通知用の関数を記述しなくても通知が飛ぶようになって素敵になる。プレッシャーも感じつつ、調べてみたのでメモ。

上記の記事で参照されている記事を辿る...

blog.recyclebin.jp

blog.recyclebin.jp

...ちょっとよくわからん。見よう見真似してみる。

関数の用意

詳細は昨日の記事

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)

f:id:u_ribo:20150923060947g:plain

関数に細工を施す

こちらは関数に直接編集して、関数による出力が行われる前に任意の処理を加える方法。

ゴミ箱さんの記事では検定をして有意だった場合に「有意差でたよっ(yeah::detayo())」が実行されるようにしていたが、人がいる環境でyeah::detayo()は恥ずかしい。声がなくて寂しいが、通知で我慢しよう。

yeah::detayo()の部分をnotify()に変更すれば良く、関数の中身さえわかってしまえば他の関数にも応用できる(同じ方法でできる)

f:id:u_ribo:20150923061133g:plain

ggplot2

{ggplot2}にも対応させた。

f:id:u_ribo:20150923061241g:plain

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")

f:id:u_ribo:20150923061316g:plain

Enjoy!