niszetの日記

アナログCMOS系雑用エンジニアが頑張る備忘録系日記

(R) sosパッケージを使ってtidyなパッケージを探す(追記)

パッケージを探すパッケージの話。

今年も残すところあとひと月半。Advent Calendarの季節がやってきましたね。
Rおじさん2年目突入ということで、今年は頑張って参加です。

さて、R4DSの和訳本も出て、tidyという存在は身近なものになりました(…よね?)

tidyの訳語についてはyutannihilationさんが下記で書かれています。

notchained.hatenablog.com

(僕の中では「よしなに」的な意味になっています)

さて、こちらにtidyポエム Advent Calendar 2017 があります。

adventar.org

…きっと、「参加したいけどidyなパッケージって何があるかわからないなー…」ということで参加をためらっている方もいるのでは。

先の記事のコマンドを実行してみます。

x <- available.packages()
grep("tidy", rownames(x), value = TRUE)
#  [1] "htmltidy"       "tidyboot"       "tidycensus"     "tidygenomics"   "tidygraph"     
#  [6] "tidyquant"      "tidyr"          "tidyRSS"        "tidyselect"     "tidystats"     
# [11] "tidystringdist" "tidytext"       "tidyverse"      "tidyxl"     

(あれ、増えてる…)

このコマンドで、パッケージ名にtidyと入っているものは見つかりました。しかし、パッケージの説明や関数、その説明など色々なところにtidyという文字は入っているはずです。

…ということで、tidyという単語が入ったパッケージを探してみます。 …で、パッケージを探せるパッケージはないか探していたところ、sosパッケージなるものを見つけました。

CRAN - Package sos

使ってみます。maxPagesのページ数は絞ってみます(デフォルトは20)

install.packages("sos")
sos::findFn("tidy", maxPages = 1)
# found 595 matches;  retrieving 1 page, 20 matches.

結果はこんな感じ。

f:id:niszet:20171113214800p:plain

1ページ当たり20行、デフォルトだと400項目まで見れるようですが、ヒットしたのは595件。思ったより多い…。

packageの列を見てみると、broomやtidyほげほげなパッケージ以外にも見つかりますね。この結果からパッケージを絞ってみたりすると良いのではと思います。

このパッケージ、調べると結構前から存在するようですね(oldバージョンを見ると2009年ごろから)

なお、bsae::readLines のように、

unlink("ex.data") # tidy up

コメント中のものもヒットするようです。

sosパッケージ中には他にもいくつか関数があるので、便利そうな使い方が見つかったらまた何か書きます。

tidyなパッケージ以外にも、パッケージ探す際に便利かな…

Enjoy!!

追記

この関数の結果はdata.frameです。なので、package列を取り出してuniqueすればパッケージが得られますね。

x <- sos::findFn("tidy", maxPages = 30)
# found 595 matches;  retrieving 30 pages
# 2 3 4 5 6 7 8 9 10 
# 11 12 13 14 15 16 17 18 19 20 
# 21 22 23 24 25 26 27 28 29 30 
# 
# Downloaded 584 links in 176 packages.

unique(x$Package)
#   [1] "broom"                "hansard"              "mnis"                 "tidytext"            
#   [5] "rlang"                "funrar"               "sweep"                "zFactor"             
#   [9] "fivethirtyeight"      "dotwhisker"           "tidyr"                "tidyquant"           
#  [13] "textshape"            "unpivotr"             "dplyr"                "plater"              
#  [17] "officer"              "ggeffects"            "esvis"                "widyr"               
#  [21] "getCRUCLdata"         "sjstats"              "rnoaa"                "rematch2"            
#  [25] "Zelig"                "bomrang"              "tidystringdist"       "R.rsp"               
#  [29] "tidycensus"           "breathtestcore"       "permutations"         "tadaatoolbox"        
#  [33] "OpasnetUtils"         "wikitaxa"             "brainGraph"           "ggsn"                
#  [37] "htmltidy"             "radiant.data"         "cleanNLP"             "Tmisc"               
#  [41] "lifelogr"             "rodham"               "highcharter"          "owmr"                
#  [45] "proustr"              "GSODR"                "NCmisc"               "RStoolbox"           
#  [49] "pixiedust"            "jtools"               "sparklyr"             "parlitools"          
#  [53] "formatR"              "base"                 "MBHdesign"            "robCompositions"     
#  [57] "tidygraph"            "nlshelper"            "rsample"              "vcfR"                
#  [61] "iadf"                 "tabularaster"         "crawl"                "tidyRSS"             
#  [65] "IRISMustangMetrics"   "TeXCheckR"            "joineRML"             "oddsratio"           
#  [69] "prediction"           "fbar"                 "eechidna"             "errors"              
#  [73] "janeaustenr"          "listless"             "spbabel"              "udpipe"              
#  [77] "units"                "mudata"               "photobiology"         "PolyPatEx"           
#  [81] "tidyxl"               "GGally"               "qtl"                  "glmbb"               
#  [85] "sjPlot"               "quickpsy"             "XiMpLe"               "rstansim"            
#  [89] "polmineR"             "rNOMADS"              "lexRankr"             "arules"              
#  [93] "atlantistools"        "comtradr"             "heemod"               "icd"                 
#  [97] "lessR"                "mandelbrot"           "naniar"               "net.security"        
# [101] "phreeqc"              "Rdpack"               "rtweet"               "rwalkr"              
# [105] "bib2df"               "ezsummary"            "tidyjson"             "reshape"             
# [109] "rollmatch"            "huxtable"             "flexsurv"             "ggpmisc"             
# [113] "sjlabelled"           "forestmodel"          "IMFData"              "merTools"            
# [117] "sjmisc"               "ARTP2"                "rprime"               "zenplots"            
# [121] "grImport"             "Hmisc"                "magclass"             "breathteststan"      
# [125] "ezknitr"              "googleVis"            "knitr"                "statquotes"          
# [129] "survutils"            "TableToLongForm"      "treemapify"           "anchors"             
# [133] "bayesSurv"            "bigpca"               "ccafs"                "decompr"             
# [137] "dmm"                  "DoE.base"             "electoral"            "EML"                 
# [141] "epiDisplay"           "furniture"            "gdata"                "ggedit"              
# [145] "IBDhaploRtools"       "icd9"                 "margins"              "mason"               
# [149] "modelr"               "mregions"             "msm"                  "mvbutils"            
# [153] "pivottabler"          "pkggraph"             "poppr"                "PtProcess"           
# [157] "purrr"                "purrrlyr"             "qdapRegex"            "r4ss"                
# [161] "radiant.multivariate" "rcoreoa"              "rcv"                  "represtools"         
# [165] "rfishbase"            "rjstat"               "Rmosek"               "rtable"              
# [169] "spex"                 "SurvRegCensCov"       "tidyselect"           "traitr"              
# [173] "twilio"               "ukbtools"             "usethis"              "yaml"                

え、本当にこんなにあるの…?