裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

sd(list())は?

2010年07月14日 | ブログラミング
x がリストのとき,sd(x) はどうなるかということ

> sd
function (x, na.rm = FALSE)
{
if (is.matrix(x))
apply(x, 2, sd, na.rm = na.rm)
else if (is.vector(x))
sqrt(var(x, na.rm = na.rm))
else if (is.data.frame(x))
sapply(x, sd, na.rm = na.rm)
else sqrt(var(as.vector(x), na.rm = na.rm))
}


なので,sd(list()) はどうなるか。
事前にクラスを確かめておこう
> x <- list(d=1:10)
> class(x)
[1] "list"
matrix でも vector でも data.frame でもないので最後の選択肢
else sqrt(var(as.vector(x), na.rm = na.rm))
が実行されるが,これはエラーになる
> sd(x)
エラー: is.atomic(x) is not TRUE

> sqrt(var(as.vector(x), na.rm=TRUE))
エラー: is.atomic(x) is not TRUE

> var(as.vector(x), na.rm=TRUE)
エラー: is.atomic(x) is not TRUE

is.atomic がなんで TRUE じゃないのかと見てみると

> as.vector(x)
$d
[1] 1 2 3 4 5 6 7 8 9 10

> class(as.vector(x))
[1] "list"

そりゃ,list ですよね
ということで,
> sd(as.vector(x)$d, na.rm=TRUE)
[1] 3.027650
> var(as.vector(x)$d, na.rm=TRUE)
[1] 9.166667
>

sd の実装が十分なのかどうかはコメントしづらい
コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« 二項分布の上側確率 | トップ | Rcmdrでの複数変数の選択 »
最新の画像もっと見る

コメントを投稿

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