1

sp_full_inは行列です:

   1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
1  0 1 1 1 1 2 2 2 1  1  1  1  1  2  1  1  1  1  1  1  2
2  1 0 1 1 1 1 1 1 1  1  1  2  1  1  1  1  1  1  1  1  1
3  2 2 0 2 2 2 2 2 2  1  1  2  2  2  1  2  1  1  1  2  1
4  1 2 1 0 2 2 2 1 2  1  1  1  2  2  1  2  1  1  2  2  1
5  2 2 2 2 0 2 2 2 2  1  1  2  1  2  1  2  1  1  1  2  2
6  2 1 1 1 1 0 1 1 1  2  2  2  2  2  1  2  1  2  2  1  1
7  2 1 1 2 1 1 0 1 1  2  1  1  2  1  1  2  1  1  1  2  1
8  1 2 1 1 1 2 2 0 1  1  1  2  2  2  1  2  1  1  2  1  1
9  2 2 1 2 1 1 2 2 0  1  1  2  1  2  1  2  1  1  2  2  2
10 2 2 1 1 1 2 2 1 1  0  2  2  2  2  1  1  1  1  1  2  2
11 2 2 1 1 1 2 1 1 1  1  0  2  1  2  1  2  1  1  1  1  2
12 1 2 1 1 2 1 1 2 1  1  1  0  2  2  1  2  1  2  1  1  1
13 2 2 2 2 1 3 2 2 2  1  1  3  0  2  1  2  2  1  2  2  2
14 2 2 1 2 1 2 1 2 1  2  2  2  1  0  1  2  1  1  1  1  1
15 2 2 2 2 2 2 2 2 2  1  1  2  2  1  0  2  1  1  1  1  2
16 1 2 2 1 1 2 2 2 1  1  2  2  2  2  1  0  1  1  2  1  2
17 2 2 1 1 1 1 1 2 1  1  1  1  2  2  1  2  0  2  2  1  1
18 1 1 1 1 1 2 1 1 1  1  1  2  1  1  1  1  2  0  1  1  1
19 2 2 1 2 1 2 2 2 2  1  1  2  2  2  1  2  1  1  0  2  2
20 2 2 1 1 1 2 2 2 2  1  2  2  2  2  1  2  1  1  1  0  1
21 1 1 1 1 1 1 1 1 1  2  2  1  2  1  1  2  1  1  2  1  0

mean(sp_full_in[which(sp_full_in != Inf)])

結果を生成します[1] 1.38322

これが何をするのかよくわかりませんが、私が読んだ方法は次のとおりです。sp_full_in のすべてのセルについて、無限でないかどうかを確認し、無限でない場合は出力 1 を返し、すべての出力を平均します。あれは正しいですか?そうでない場合、どのように準備する必要がありますか?

4

3 に答える 3

4

which(sp_full_in != Inf)整数のベクトルを返します (そのうちの 1 つだけが 1 です)。その整数のベクトルは、インデックスとして "[" に渡され、関数に渡されたベクトルとして のsp_full_inすべての値を返します。sp_full_inmean

R の式を「裏返しに」読むことを学ぶのは良い考えです。最も内側の関数呼び出しを見つけて、精神的に評価します。この場合sp_full_in != Infは . これは、 に渡されるすべての TRUE の論理行列を返しますwhich()。「arr.ind」引数がないため、インデックスのアトミック ベクトルを返します。

于 2013-05-29T20:28:26.727 に答える
1

which 他の答えは、マトリックス内のすべての有限エントリの平均を取得する理由を説明するのに適していますが、この場合は何もしないことに注意してください。私も使いすぎの悪い癖がありましwhichた。

> a <- matrix(rnorm(4), nrow = 2)
> a
           [,1]       [,2]
[1,]  0.5049551 -0.7844590
[2,] -1.7170087 -0.8509076
> a[which(a != Inf)]
[1]  0.5049551 -1.7170087 -0.7844590 -0.8509076
> a[a != Inf]
[1]  0.5049551 -1.7170087 -0.7844590 -0.8509076
> a[1] <- Inf
> a
          [,1]       [,2]
[1,]       Inf -0.7844590
[2,] -1.717009 -0.8509076
> a[which(a != Inf)]
[1] -1.7170087 -0.7844590 -0.8509076
## Similarly if there was an Infinite value
> a[a != Inf]
[1] -1.7170087 -0.7844590 -0.8509076

そして、私たちがそれに取り組んでいる間、is.finiteしばしば よりも好ましい機能についても言及する必要があり!= Infます。、、およびにis.finite戻ります。FALSEInf-InfNANaN

于 2013-05-29T23:39:25.927 に答える
0

いいえ、しかし、あなたは近いです。これがマトリックスに適用されると、マトリックスのすべてのセルが条件に対してチェックされます。ここでは、Inf ではありません。条件を満たすすべてのセルのインデックスを返し、コードに従って、返されたインデックスに従ってセルの値を出力し、最後にそれらの平均を計算します。

于 2013-05-29T20:34:34.170 に答える