Rで基数変換のメモ

基数変換には色々やり方があると思いますが、そのうちの一つとして。

> a <- 10
> str(a)
 num 10
> class(a)
[1] "numeric"

> class(a) <- "hexmode"
> a
[1] "a"
> str(a)
Class 'hexmode'  num 10

> class(a) <- "octmode"
> a
[1] "12"
> str(a)
Class 'octmode'  num 10

クラスを変えると、内部データは同じなのに表現形が変わる(Rでどういうのか分かりませんが)というのは面白い。sprintfでもいいんですが、sprintfすると文字列に変換されてしまって、数値計算には使えなくなってしまうところは注意。

> class(a) <- "hexmode"
> a
[1] "a"
> b <- sprintf("%x", a)
> b
[1] "a"
> a * 10
[1] "64"
> b * 10
 以下にエラー b * 10 :  二項演算子の引数が数値ではありません 

うーん。まあ、bもそのまま使えないことはなくて

> as.numeric(paste("0x", b, sep="")) * 10
[1] 100

とか。めんどくさいけど。