★ R -- Stem & Leaf ★

 247 R -- Stem & Leaf  青木繁伸  2002/01/13 (日) 23:21


247. R -- Stem & Leaf  青木繁伸  2002/01/13 (日) 23:21
get.factor <- function(x, minx, maxx)
{
    for (i in c(1:10, -1:-10)) {
        ll <- trunc(maxx*10^i)-trunc(minx*10^i)
        if (ll >= 2 && ll < 19) {
             return(10^i)
        }
    }
    return(1)
}

# f は小数点の移動(元の値を10^f倍した整数部をstemにする)
my.stem <- function(d, f=-99)
{
    DUMMY <- 99   # ダミーの leaf
    MINUS <- -0.1 # -0.xxx などの stem
    f <- ifelse(f == -99, get.factor(d, min(d), max(d)), 10^f)
    temp <- trunc(d*f*10)
    stem <- trunc(temp/10)
    leaf <- abs(temp)-abs(stem*10)
    stem <- ifelse(stem == 0, ifelse(d > 0, 0, MINUS), stem)

# 跳んでいる stem を補間する
    min.stem <- min(stem)
    max.stem <- max(stem)
    stem <- c(stem, min.stem:max.stem)
    leaf <- c(leaf, rep(DUMMY, max.stem-min.stem+1))

# -0.xxx と +0.yyy が存在しうるとき
    if (max.stem > 0 && min.stem < 0) {
        stem <- c(stem, MINUS)
        leaf <- c(leaf, DUMMY)
    }
    res <- table(stem,leaf)
    sapply(1:nrow(res),
        function(i) {
            stem.temp <- dimnames(res)$stem[i]
            cat(ifelse(as.numeric(stem.temp) == MINUS, "-0", stem.temp), "| ")
            sapply(1:ncol(res),
                function(le) {
                    if (dimnames(res)$leaf[le] != DUMMY) {
                        sapply(rep(dimnames(res)$leaf[le], res[i,le]), cat)
                    }
                }
            )
            cat("\n")
        }
    )
    cat("stem * ", 1/f, "\n")
}


● 「統計学関連なんでもあり」の過去ログ--- 017 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る