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 の実装が十分なのかどうかはコメントしづらい
> 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 の実装が十分なのかどうかはコメントしづらい