ジュリアで0または欠損値を除外した平均値の計算方法
概要
R言語の合計sum()
や平均mean()
には、関数自体がその欠損値を無視するオプションを持っているが、ジュリアではそのようなオプションがない代わりに関数型プログラミングfunctional Programming的な方法を積極的に使っている。
コード
julia> data = [0,1,2,3,0]
5-element Vector{Int64}:
0
1
2
3
0
julia> sum(data) / length(data)
1.2
julia> sum(data) / sum(!iszero, data)
2.0
上は$0$まで含んで全ての標本数で割った1.2、下は!iszero
という関数を引数に与えて$0$でない値だけをカウントして得た標本数で割った2.0を得た。Rよりも強力だと言える部分は、関数自体のオプションに頼らずにisnan()
, isinf()
, ismissing()
などの多数の例外処理関数を同じ方法で使用でき、カスタムが自由であることだ。
パフォーマンスに大きな違いはないが、is~
系の関数のリターンが必ずブーリアンであるなら、分母のsum()
がcount()
に変わっても問題ない。
環境
- OS: Windows
- julia: v1.7.0