前回の記事とは逆の話です。
Java にはアンダースコア数値リテラルという便利な書き方があります。
int MAX_LIMIT = 100_000_000;
この書き方は、大きな数値を書くときに桁数がわかりやすくなって便利です。
これを R でも再現できないかと思って下記の関数を作ってみました。
Num <- function(..., digits=3) {
args <- rev(unlist(list(...)))
result <- 0
for(i in seq_along(args)) {
result <- result + args[i] * 10^(digits*(i-1))
}
result
}
使い方は下記の通りです。
kMaxLimit <- Num(100,000,000)
print(as.integer(kMaxLimit))
結果
[1] 100000000
追記
ゴミ箱さま(@kos59125)によると次の書き方が速いらしい。
Num <- function(..., digit=3) {
args <- unlist(list(...))
result <- 0
d <- 10 ^ digit
for(arg in args) {
result <- result * d + arg
}
result
}
コメントにありますが、一行で書けるらしい。すごい。
Num <- function(..., digits=3) drop(unlist(list(...)) %*% (10^(digits*((length(list(...)):1)-1))))