niszetの日記

10年目エンジニアが最近勉強したことを忘れないようにメモをする

(R) Rで 0xFFL と 書いてみる(11/18追記)

言語仕様?

16進数ってのがあります。16で繰り上がるので、10がA、11がB...で15をFで表します。

0xFFは 0xが16進数であることを示し、はじめのFは16x15、あとのFの15とあわせて 16x15 + 15 = 255 でおなじみの?数字になります。

さて、Rでこの0xFFをコンソールに入力すると

0xFF
# [1] 255

こうなります。ちゃんと?10進数にしてくれるのですね。

しかし型を見てみると、

str(0xFF)
#  num 255

なんと?numericです。integerじゃないのか…

末尾にLをつけると整数型になる

Rで整数型にする場合は末尾にLをつけると出来ますよね。

1
# [1] 1
str(1)
#  num 1

# numericが返ってくる。

1L
# [1] 1
str(1L)
#  int 1

# integerが返ってくる

これは先の16進数でも同じで、

str(0xFF)
#  num 255
0xFFL
# [1] 255
str(0xFFL)
#  int 255

となります。だから何だって話ですが。

この、0x**の書き方について、Rの言語仕様的にどこかに書かれているのだと思うのですが未だに見つけられず。

少し古いドキュメントですけども、例えばこれ

https://cran.r-project.org/doc/contrib/manuals-jp/R-lang.jp.v110.pdf

にも書かれていません。

まぁ、動くので良いのですが。。。。

今作成中のrYMF825でこの書き方を使っているので、仕様としてどう決まっているのかなーと思った次第です。

ちなみに、 qiita.com

で知りましたが、as.hexmodeという関数があるようで

str(as.hexmode("FF"))
# Class 'hexmode'  int 255

のようにclassで扱うのですね。

さらに、read_csvで読み込む場合、0xFFは文字列として扱われてしまいます。読んだ後にas.integerすると良いと思います(型を指定するとうまく読めなかった) これはまた次回?書きますか…

このあたり(rawとか)は情報があまりないのですよね…本来の使い方じゃないからか…

Enjoy!!

追記

ホクそうむさんに教えていただきました。R Language Definitionの3.1.1や10.3.1など、にいちおう記載はありますとのことで、

cran.r-project.org

So ‘0x10L’ creates the integer value 16 from the hexadecimal representation. 
Numeric constants can also be hexadecimal, starting with ‘0x’ or ‘0x’ followed by zero or more digits, ‘a-f’ or ‘A-F’. Hexadecimal floating point constants are supported using C99 syntax, e.g. ‘0x1.1p1’.

などがありました。C99のsyntaxを見ればよいようですね。

やはり大元の情報に当たっていくのが良いですね…

改めて

Enjoy!!

(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時間を超えてまだ終わらない。それ以外の依存パッケージも数時間かかってます。

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

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