niszetの日記

細かい情報を載せていくブログ

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

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

Shiny/pythonInR/pyserial/RStudio/R/Windows->Arduino->YMF825で音を鳴らしたメモ (追記)

どこかにコードを置かないと何やってるのかわからないのでは…

掲題の通りです。先日の

niszet.hatenablog.com

から、ラズパイ成分を抜いて、Shiny, PythonInR, pyserialが入っています。あと、win環境です。例のserialは結局動かないままなので、pureRでやるのはしばらく置いておきます。

shiny UI を使いたいので、ラズパイの場合はRStudioが必要(ビルドできなかった)で、win環境だとpyserialに頼るしか今のところ簡単な方法がないので、現状の解としてはこんなところ。年内には進捗したい。

ここに書くには長いので需要があればどこかに置きますが…

shinyのUIはこれ。ダサい…

f:id:niszet:20171112191823p:plain

追記 webshotでshinyを撮る場合、ディレクトリ名を指定すればよかったのでした。

webshotappshot('rYMF825', "rYMF825.png")

こんな感じ。ただ、今度はファイルのアップロードに失敗。↑の絵は差し替えていません。

initで初期設定、ONで音が出る。OFFで音が止まるようにしています。closeでコネクションを閉じておかないといけないので、on.exit的なものが必要、などなどまだまだやることが沢山ありますが、具体的に作る形がわかっているので手は止まらないですね。

とりあえず中間報告でした。

まだ音色を変えるなどもやってないのですが、公式のsample2が多機能なので、まずはそちらを解読したいなぁという気持ちです(が、プログラム的には結構重そうなので、さてどうするかなぁ…)

なんだかRで音楽が作れそうですね

Enjoy!!

serialも動かない…でもpyserialがある…!

windowsではダメなのか…。

昨日の続き。

niszet.hatenablog.com

serialの方も試してみましたが、ダメでした…

そもそも、これどうやってコネクションをopenにするの?というと、

serial:::open.serialConnection(con)

だと思うのです。

ここで、conは

con <- serial::serialConnection("COM4", "COM4", mode="9600,n,8,1", newline=1, buffersize = 64)

で作ってみましたが、これは単にS3クラスを返すだけ。実際は上記の、通常ではアクセスできないopenの関数を使うのだと思う(この時点でなんかおかしい)のですが、実際に動かしてみると、

# Error: [tcl] couldn't open serial "//./COM4": no such file or directory.

となってしまいました。よくわかりませんが、なぜか//./という文字が追加されてしまう。

ということで、pyserialに切り替えます。

pyserialがpython3でも使えるみたいです。

qiita.com

を参考に、入れてみました。 巷ではcondaは使わない方が良いとかなんだとか言われていますが、去年一昨年くらいはみんなオススメしていたじゃないですか…なぜなの…

まぁ、今更入れ替える気もないので、手順通りに入れて使ってみたところ、

niszet.hatenablog.com

で作ったプログラムがArduinoで動いたので、大丈夫そうです。あとはこれをpythonInRで呼べば良いですね(はじめからこれで良かったのだ…)

ラズパイ上で動かすときは、Rから直接IOを制御しますが、今はとりあえずPCからUSBでアクセスするところを頑張ってみましょう。

以上!

Enjoy!!

CRANにserialとRduinoというパッケージを見つけるもwindows上では動かなくて悲しい思いをした話

タイトルで言い切った感。

Rでシリアル通信、したいですよね!

そんなあなたにはこのパッケージ。その名もserial

CRAN - Package serial

RからArduino触りたいですよね!

そんなあなたにはこのパッケージ。その名もRduinoパッケージ

CRAN - Package Rduino

WindowsでRを使うのは間違っているのだろうか

喜び勇んでRduinoパッケージを使おうとしてみました。

install.packages("Rduino")
library(Rduino)

con2 <- Rduino::rduinoConnect()
Error in Rduino::rduinoConnect() : Other platforms not supported yet

えぇ…

なんと、windowsはサポートされていません。

github.com

CRAN上のパッケージでこれは…逆にレアケースでラッキーでしたね

なお、Rduinoパッケージの関数はServoとか入っているのでそういう用途向けかもしれません。

いかんせん動かないから何も調べられないけど…

そんなことないでしょ…不運だし、winでもいけるでしょ…

実は、これらのパッケージ、ずいぶん前にyutannnihilationさんに教えていただいていました。

「しかし、github上か…。いや、シリアル通信くらい自分で作って見せる…!」と思っていました。あのころは若かったのだ。

なお、serialは中身がtclの変態実装なのですよね…。

serialの方も今動いていないので調査中。 結果は明日には。

ということで、中途半端な内容ですが…

Enjoy!!

ラズパイ上でのRStudioのビルドは諦めました…

結局終わらなかった。

このあと、

niszet.hatenablog.com

12時間ほど待っていましたが、やっぱりメモリネックで全然進まず。やはり力押しではダメですねぇ… やはりRStudioのビルドはクロスコンパイル環境構築からです。もう少しかかりそうです。

それはそれとして、Ubuntu良い感じですね。ちょっとUbuntu幼稚園に入園してみます。 コミュニティ参加してみようかな。初心者に優しい文化って大事だよなぁ、と。

5年くらい下に誰もつかずに仕事の内容がずっと変わらないってのは辛いもんですよ…。

ま、それはそれとして。

色々進んでませんが、まぁ気ままにやりましょう。仕事でやってるわけではないですしね

RStudioのビルドが終わらない…

もうね…

さて、どうもログを見てみるとビルド時にメモリが足りないような感じです。 そういえば、こちらの記事

www.karada-good.net

でも最初にやってました。でもなんかubuntuだとこれで見ても何もないよ?と思ったら、最初の時点ではswapの設定はされていないそうです。

そこで、こちらの記事を参考に、swap領域を作成。

qiita.com

問題の箇所は通過しました。

raspbianの場合は、こちらが参考になりそうです。今回はubuntuなので読んだだけで実行していませんが…

inaba.hatenablog.com

でもまぁ終わってないんだけど。

単純にビルドにすごい時間かかります。RStudio本体が6時間を超えてまだ終わらない。それ以外の依存パッケージも数時間かかってます。

そんなわけで、こんなことを試すのはよほどの暇人でないとなかなか出来なさそうです。

ロスコンパイル環境もさっさと立ち上げよう…

エレクトロニコス・ファンタスティコス! 本祭I に行ってきました。

参加してきたよ

ということで、今日はこちらに行ってきたのです。

和田永
「エレクトロニコス・ファンタスティコス!」
〜本祭 I : 家電雷鳴篇〜

electronicosfantasticos.com

ニコスさんの記事は以前も書いたかもしれませんが、イベントの参加はMFT2017以来でした。

結構な参加者により、開始はちょっと押していました。僕もぎりぎりに行った人なのですが。

楽しかった…

あの人数で電磁盆踊り。壮観だろうなぁ。

初めて見た家電楽器もアリ、歌アリ、踊り(自分も)アリで濃厚な3時間?でした。

ちょっと見学行ってみますか…!?