1255 よーやく整数分割の関数を R で書けた
(以前
のは Perl で書いてた).
関数名とかはまたまた変更するかもしれないけど,
> source("grouping.R")
> partition.int(5)
[[1]]
[1] 5
[[2]]
[1] 4 1
[[3]]
[1] 3 2
[[4]]
[1] 3 1 1
[[5]]
[1] 2 2 1
[[6]]
[1] 2 1 1 1
[[7]]
[1] 1 1 1 1 1
というかんぢで.
R コードはこう.
partition.int <- function(residual, imax = NA)
{
residual <- as.integer(residual)
if (is.na(residual) == TRUE | residual < 1)
stop("the argument must be an integer and larger than zero")
if (is.na(imax) == TRUE)
imax <- residual
else
imax <- as.integer(imax)
tree <- c()
for (i in rev(1:imax)) {
branches <- c()
if (i == residual)
branches <- c(i)
else if (i < residual)
branches <- lapply(
Recall(residual - i, i),
function(sb) c(i, unlist(sb))
)
if (length(branches) > 0)
tree <- c(tree, branches)
}
tree
}
黒石さん作の R 版とかもっと短い.
私のはムダに長いような.
そして lapply()
とかうまく使えていない.