怠業ばかりしてられる情勢でもないんで,
R プログラミングのつづき.
この言語ってさー,
なんかふつーじゃない関数が標準的に組みこまれてるんで,
書きかたもふつーじゃなくなる.
たとえば,
「二次元平面上にたくさんの点があるときに,
全部の点について最寄りの点をさがせ」
という関数はこれだけで書けてしまう.
seek.the.nearest <- function(id, x, y)
{
if (length(id) != length(x) | length(x) != length(y))
stop("ERROR: unbalanced vectors of id, x and y")
n <- length(id)
dm <- as.matrix(dist(matrix(c(x, y), n, 2))) # distance matrix
diag(dm) <- NA # to discount self
sapply(1:n, function(i)
id[rank(dm[i,], ties.method = "random") == 1] # RANDOM!
)
}
しかし,
簡潔にかけるからといって読みやすいわけでもない,
と.
計算コストもよくわからん.
実行例:
> seek.the.nearest(c("a", "b", "c"), c(1, 1, 1), c(1, 2, 4))
[1] "b" "a" "b"