同じ愚を繰り返さないために何度Rを繰り返せばいいのかをRによって知りたい

ちょっとした猫に関するパッケージを作りたくて、猫っぽいパッケージ名というとあれです、purrrがありますよね(猫が喉を鳴らす時の音?らしいです)。安易安直な私は、じゃあpurrrrにしようかな、と思うわけですが、待てよ、と。パッケージ名が似ていることが引き起こした痛ましい事件がふと脳裏を過ります。

http://mockquant.blogspot.jp/2015/08/new-package-dplyrr-utilities-for.html

あれからもう1年経つんですね。dplyrr...あいつはいい奴だった。

同じ愚を繰り返さないために、rを何度繰り返せばかぶる危険のないパッケージ名になるか調べてみましょう。

具体的には、「pu+(任意の回数繰り返されるr)」という単語をグーグル検索にかけて、ヒットする件数でマイナーさを判定したい。Google検索にはもちろんAPIもありますが、そんなに数が多いものでもないのでスクレイピングでやってみます。URLはhttps://google.com/search?q=キーワード、検索結果のDOM要素のIDは#resultStatsです。こんな感じの関数をつくります。

library(httr)
library(rvest)

f <-function(num) {
  if(!purrr::is_scalar_numeric(num)) {
    stop("num must be a scalar numeric")
  }
  res <- GET("https://google.com/search",
             query = list(
               q = sprintf('"pu%s"', str_dup('r', num))
               )
             )
  stop_for_status(res)
  
  content(res) %>%
    html_node("#resultStats") %>%
    html_text() %>%
    data.frame(raw = ., parsed = readr::parse_number(.))
}

これを1から30まで(つまりpurからpurrrrrrrrrrrrrrrrrrrrrrrrrrrrrrまで)調べてみます。

d <- purrr::map_df(1:30, f, .id = "r_count")

knitr::kable(d)
r_count raw parsed
1 約 187,000,000 件 1.87e+08
2 約 11,300,000 件 1.13e+07
3 約 1,150,000 件 1.15e+06
4 約 393,000 件 3.93e+05
5 約 174,000 件 1.74e+05
6 約 156,000 件 1.56e+05
7 約 55,100 件 5.51e+04
8 約 38,900 件 3.89e+04
9 約 23,500 件 2.35e+04
10 約 46,600 件 4.66e+04
11 約 11,600 件 1.16e+04
12 約 17,800 件 1.78e+04
13 約 5,570 件 5.57e+03
14 約 32,600 件 3.26e+04
15 約 4,600 件 4.60e+03
16 約 2,100 件 2.10e+03
17 約 5,910 件 5.91e+03
18 約 1,740 件 1.74e+03
19 約 989 件 9.89e+02
20 約 1,180 件 1.18e+03
21 約 1,100 件 1.10e+03
22 約 720 件 7.20e+02
23 約 981 件 9.81e+02
24 約 532 件 5.32e+02
25 約 2,330 件 2.33e+03
26 約 1,960 件 1.96e+03
27 約 4,460 件 4.46e+03
28 約 2,020 件 2.02e+03
29 約 1,180 件 1.18e+03
30 約 4,440 件 4.44e+03

これは…よく分かりませんが24回がいちばん少ないのでこれを採用します。次回、purrrrrrrrrrrrrrrrrrrrrrrrパッケージとは何かがついに明らかになります(いや、purrrとは何の関係もないんですけど)。備えよう。