2017-08-10 4 views
0

でこれはなぜですか? y <- min(dim(x))diag()を返すこの関数の説明はR

このコードを試してみたところ、c <- vector()となっていました(c <- x[i,i]がループしていました)。ループ内でc[i]を使用するとエラーが表示されます)。

x <- matrix(1:25, 5,5) 
> diag(x) 
> n <- function(x){ 
    y <- min(dim(x)) 
    c <- vector() 
    for(i in 1:y){ 
     c[i] <- x[i,i] 
    } 
    c 
} 
> n(x) 

答えて

1

y <- min(dim(x))は、マトリックスのより小さい寸法を決定するために使用される。したがって、yを使用すると、forループの反復回数は、行列のこの次元に等しくなるように固定されます。次に、[i,i]を使用して対角要素にアクセスします。

この例では、行列のサイズは5x5なので、両方の次元が同じです。したがって、yが5の場合、iを1から5までループします。今度は、[i,i]をマトリックスインデックスに使用しているので、[1,1]の後に[2,2]が得られます。本質的には、[i,i]は、行番号と列番号の両方が同じ値である場合に要素を選択します。

c <- vector()を削除すると、cは1つの変数として扱われ、したがってc[i]はエラーをスローします。また、cの値は上書きされ続けるので、ループを終了すると、最後の値が得られます。この場合、この値は25です。

+0

これは私があなたの答えから視覚化したもので、最小次元は最初[1,1]、次に[2,2]、[3,3]、[4,4]、[5,5]です。なぜ[1,1]の後の次の小さい方が[1,2]ではないのですか? – zizu

+0

@zizu更新された回答を確認します。私は行列がどのように働くか、そして[R](https://stat.ethz.ch/R-manual/R-devel/library/base/html/matrix)を見れば参考になると思います。 html) – Aramis7d

+0

seq_along(x)のiが指定され、x [i、i]が行列の対角要素を選んだ場合、c [i] <-x [i、i]は対角を生成しませんか?私はこれを知っている:x [i、i]のエラー:範囲外の添え字 - これは長さ25がダイアゴナル5の長さと一致しないためですか? – zizu