★ R メーリングリスト ★

 231 R メーリングリスト  青木繁伸  2002/01/11 (金) 18:11
  232 Re: R メーリングリスト  青木繁伸  2002/01/11 (金) 18:27
   236 Re^2: R メーリングリスト  青木繁伸  2002/01/11 (金) 21:08
    237 Re^3: R メーリングリスト  青木繁伸  2002/01/11 (金) 23:22


231. R メーリングリスト  青木繁伸  2002/01/11 (金) 18:11
http://www.md.tsukuba.ac.jp/epidemiology/~mokada/ml/R-jp.html
というのがあります。
私も昨日参加しました。
早速,そこで setm and leaf について書いていますが,ふさわしくないだろうか。みんなおとなしいみたいです。http://www.md.tsukuba.ac.jp/epidemiology/ML/R-jp/20020111/370.html
base に含まれている stem 関数は,デフォールトの設定が思わしくないのです。
とても満足がいくものではないですが,プロトタイプとして。
データのチェックなどは何もしていません。
3箇所もある for ループが汚いです。
R(S)で,for のあるプログラムは書きたくないです。
文字列操作関数を捜す必要があります。
my.stem の第2引数は,データの倍率を表します。
とはいっても,10のべき乗の数でないといけません。

get.factor <- function(x)
{
	min0 <- min(x)
	max0 <- max(x)
	for (i in -10:10) {
		ll <- trunc(max0*10^i)-trunc(min0*10^i)
		if (ll > 5 && ll < 30) {
			return(10^i)
		}
	}
	return(1)
}

my.stem <- function(d, f=0)
{
	if (f == 0) {
		f <- get.factor(d)
	}
	temp <- trunc(d*f*10)
	stem <- trunc(temp/10)
	leaf <- (abs(temp)-abs(stem*10))
	stem <- ifelse(stem == 0, ifelse(d > 0, 0, -0.000000001), stem)
	df <- data.frame(aa=d,ab=temp,bb=stem,cc=leaf)
	res <- table(stem,leaf)
	nstem <- length(dimnames(res)$stem)
	nleaf <- length(dimnames(res)$leaf)
	for (i in 1:nstem) {
		cat(ifelse(dimnames(res)$stem[i] == "-1e-09", "-0", dimnames(res)$stem[i]), "| ")
		line <- ""
		for (j in 1:nleaf) {
			if ((c <- res[i,j]) > 0) {
				digit <- dimnames(res)$leaf[j]
				for (k in 1:c) {
					line <- paste(line, digit, sep="")
				}
			}
		}
		cat(line, "\n")
	}
	cat("stem * ", 1/f, "\n")
}

d <- rnorm(200)
my.stem(d)
my.stem(d,10)

     [このページのトップへ]


232. Re: R メーリングリスト  青木繁伸  2002/01/11 (金) 18:27
ループの部分は以下のようにして,一つの for を消しました。
    for (i in 1:nstem) {
        cat(ifelse(dimnames(res)$stem[i] == "-1e-09", "-0", dimnames(res)$stem[i]), "| ")
        for (j in 1:nleaf) {
            sapply(rep(dimnames(res)$leaf[j], res[i,j]), cat)
        }
        cat("\n")
    }

     [このページのトップへ]


236. Re^2: R メーリングリスト  青木繁伸  2002/01/11 (金) 21:08
for は,全部消しました。全部 sapply にしたのですが。

        nleaf <- length(dimnames(res)$leaf)
        sapply(1:nstem,
            function(i) {
                cat(ifelse(dimnames(res)$stem[i] == "-1e-09", "-0", dimnames(res)$stem[i]), "| ")
                sapply(1:nleaf,
                    function(le) {
                        sapply(rep(dimnames(res)$leaf[le], res[i,le]), cat)
                    }
                )
                cat("\n")
            }
        )
        cat("stem * ", 1/f, "\n")

     [このページのトップへ]


237. Re^3: R メーリングリスト  青木繁伸  2002/01/11 (金) 23:22
下請け関数にも for がありましたね
get.factor <- function(x)
{
    sapply(-10:10,
        function(i) {
            ll <- trunc(max(x)*10^i)-trunc(min(x)*10^i)
            if (ll > 5 && ll < 30) {
                return(10^i)
            }
        }
    )
    return(1)
}
こつがわかりました。

     [このページのトップへ]


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