言語仕様?
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など、にいちおう記載はありますとのことで、
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!!