1

条件を満たす特定の行にのみ関数を適用しようとしています。「適用」機能を使用する必要があることを他のスレッドから見ましたが、機能させることができないようです。
これが私がこれまでに持っているものです:

a = which(decisionMatrix[,1]>0 & decisionMatrix[,4] < decisionMatrix[,5] &
          tail(ratios,1)>decisionMatrix[4])

これにより、条件を満たす行の数が得られます。

次に使用します:

apply(decisionMatrix[10],a,decisionMatrix[,1]/decisionMatrix[,5])

私がここでやろうとしているのは、「上記の条件を満たす行ごとに、その行の最初の列を取り、その行の 5 列目で割り、その結果をその行の 10 列目に格納する」ということです。

どなたかアドバイスをいただけないでしょうか?

4

2 に答える 2

5

使用しないでくださいapply行をその場で変更するには、次のようにします。

decisionMatrix[a, 10] <- decisionMatrix[a, 1] / decisionMatrix[a, 5]
于 2013-10-14T11:11:34.880 に答える
3

Ananda のコメントに続いて、次のようなものが必要です。

apply(decisionMatrix[a,], 1, function(x) x[1]/x[5])

ただし、出力を入力と同じ次元にしたい場合 (たとえば、元のdecisionMatrixオブジェクトに追加し直す場合) は、代わりに関数をすべての行に適用し、その後その行をサブセット化することをお勧めします。出力:

out <- apply(decisionMatrix, 1, function(x) x[1]/x[5])
out[-a] <- NA

@agstudy が指摘しているように、後者は単に実行するだけでベクトル化できます

out <- decisionMatrix[,1]/decisionMatrix[,5]

ただし、そのソリューションが機能しない、より複雑な操作がある場合があります。操作で機能する場合、ベクトル化されたソリューションはよりクリーンで高速です。

これを元に戻して保存することもできます。decisionMatrixこれは、元の構造によって異なりますdecisionMatrix

# If you want to replace an existing column 10:
decisionMatrix[,10] <- out

# If you want to column bind the result back to your original matrix:
decisionMatrix <- cbind(decisionMatrix, out)
于 2013-10-14T10:49:46.653 に答える