0

マトリックス作業を満たすために二重ループを作成しようとしているため、ワークフローに少し問題があります。スクリプトの開始時に、次のように定義します。

Tijd_SAT_i <- c("08", "09", "10", "11", "12", "13", "14") 
D <- c(0, 0.01, 0.02, 0.03, 0.04, 0.05)
POD <- matrix(1:(length(Tijd_SAT_i)*length(D)), c(length(Tijd_SAT_i), length(D)))
FAR <- matrix(1:(length(Tijd_SAT_i)*length(D)), c(length(Tijd_SAT_i), length(D)))

その後、"BASE" (86 x 42 x 7 配列) と "SAT" (86 x 42 x 7 配列) を作成するための大量の作業が行われます。BASE と SAT は両方とも、倍精度として 0 から 22 までの値を含み、NA 値を持ちます (NA 値は、オランダとそれ以降のすべてのアウトラインを作成します)。次に、POD (検出確率) と FAR (誤警報率) の 2 つの行列を 1 時間 (Tijd_SAT_i) ごとに入力する必要があります。6 つの異なるしきい値と、それらが POD と FAR に与える影響を計算します。後でこれらの値をデータフレームに入れ、RGL を使用してそれらをプロットします。POD と FAR を埋めるために私が書いたコードは次のとおりです。

for (k in 1:(length(Tijd_SAT_i))) {
  for (l in 1:(length(D))) {
    pre_C_BASE <- BASE[,,k]
    pre_C_SAT <- SAT[,,k]
    pre_C_BASE[pre_C_BASE >= D[l]] <- 1
    pre_C_BASE[pre_C_BASE < D[l]] <- 0
    pre_C_SAT[pre_C_SAT >= D[l]] <- 1
    pre_C_SAT[pre_C_SAT < D[l]] <- 0
    C_SAT <- as.vector(SAT)
    C_BASE <- as.vector(BASE)
    C_table <- (with(warpbreaks, table(C_SAT, C_BASE)))      
    print(C_table)
    print(dim(C_table))
    #p <- C_table[1, 1]/(C_table[1, 1]+C_table[2, 1])
    #f <- C_table[1, 2]/(C_table[1, 1]+C_table[1, 2])
    #POD[k, l] <- p
    #FAR[k, l] <- f
  }
}

しかし、C_table は 2 x 2 の行列ではなく、漠然とした理由で 1237 x 3351 の行列になります。したがって、# の後ろにあるものは実行できません。これでどこが間違っていますか?

編集: 2 行 2 列の行列が表示されない原因が見つかりました: 間違った参照 SAT は pre_C_SAT である必要があります。これで、分割表が作成されました (42 個すべて)。問題は、#s を使用してビットを実行すると、「添え字が範囲外」というエラーが発生することです。何故ですか?

編集: 問題は、「テーブル」が常に 2 x 2 の行列を出力するとは限らないことにあると思います。

編集:Pffffrwt。それを私が直した。入力ベクトルの 1 つにゼロが存在しない場合、2 行 2 列の行列を返さないという点で、table コマンドには非常に厄介な問題がありました。1, 0, 0, 1 と 1, 0, 1, 0 を後続のベクトルに追加し、4 つの値すべてを強制的に作成してから、後続の式から 1 を減算することで修正しました。

4

2 に答える 2

0

後続のベクトルに 1, 0, 0, 1 と 1, 0, 1, 0 を追加し、4 つの値すべてを強制的に作成してから、後続の式から 1 を減算することで問題を修正しました。

于 2013-10-10T10:33:54.340 に答える
0

ループの各反復で、定義します

C_SAT <- as.vector(SAT)
C_BASE <- as.vector(BASE)

したがってC_SAT、 とC_BASEは常に と の次元の積に等しい長さのベクトルにSATなりBASEます。

次に、定義します

C_table <- (with(warpbreaks, table(C_SAT, C_BASE)))

データ フレームは分析とどのようなwarpbreaks関係がありますか? これをどこかからコピーして貼り付けましたか?結果に影響はありません。

とにかく、table(C_SAT, C_BASE)の一意の値の数と同じ数の行と、の一意の値の数C_SATと同じ数の列がありますC_BASE

于 2013-10-02T10:27:11.673 に答える