裏 RjpWiki

文字通り,RjpWiki の裏を行きます
R プログラム コンピュータ・サイエンス 統計学

Julia に翻訳--021

2021年03月04日 | ブログラミング

#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
以下のプログラムを Julia に翻訳してみる。

ステム・アンド・リーフ
http://aoki2.si.gunma-u.ac.jp/R/stem.html

ファイル名: stemandleaf.jl  関数名:stemandleaf

翻訳するときに書いたメモ

度数分布表を作るだけで FreqTables, printf を使うだけで Printf を読むのは大げさだなあ

==========#

using FreqTables, Printf

function stemandleaf(d, f=-99)
    function getfactor(x, minx, maxx)
        for i in vcat(1:10, -10:-1)
            ll = floor(Int, maxx*10.0^i)-floor(Int, minx*10.0^i)
            if 2 <= ll < 19
                 return 10.0^i
            end
        end
        return 1
    end

    DUMMY = 99
    MINUS = -0.1
    f = f == -99 ? getfactor(d, minimum(d), maximum(d)) : 10^f
    temp = floor.(Int, d*f*10)
    stem = floor.(Int, temp/10)
    leaf = abs.(temp) - abs.(10stem)
    stem = stem == 0 ? (d > 0 ? 0 : MINUS) : stem
    minstem = minimum(stem)
    maxstem = maximum(stem)
    stem = vcat(stem, minstem:maxstem)
    leaf = vcat(leaf, fill(DUMMY, maxstem-minstem+1))
    if maxstem > 0 && minstem < 0
        stem = vcat(stem, MINUS)
        leaf = vcat(leaf, DUMMY)
    end
    res = freqtable(stem, leaf)
    rownames = names(res)[1]
    colnames = names(res)[2]
    nr, nc = size(res)
    for i = 1:nr
        stemtemp = rownames[i]
        @printf("%5d|", stemtemp == MINUS ? "-0" : stemtemp)
        for le = 1:nc
            if names(res)[2][le] != DUMMY
                print(string(colnames[le]) ^ res[i, le])
            end
        end
        print("\n")
    end
    println("stem * $(1/f)")
end

using Random
Random.seed!(123);
d = floor.(Int, randn(200) .* 20 .+ 100);
stemandleaf(d)

    3|7
    4|11
    5|4
    6|14457999
    7|01123346777888899
    8|0011122223444455556667788999
    9|00011122233333344445555566666677777899
   10|000000011222334444444555566666677778888999
   11|0011123333445566666778899
   12|00011223335556689
   13|00012333468
   14|00125566
   15|25
stem * 10.0

コメント   この記事についてブログを書く
« Julia に翻訳--020 | トップ | Julia に翻訳--022 »
最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

ブログラミング」カテゴリの最新記事