5

私は現在、ループを持っています。実際には、シミュレーションモデルでは、ループ内のループであり、多数の個人で遅くなります。私はそのほとんどをベクトル化し、それを非常に高速にしました。しかし、リストの複数の要素を同じものとして割り当てる部分があり、達成したいタスクだけに大きなループを単純化しています。

new.matrices[[length(new.matrices)+1]]<-old.matrix

ループが繰り返されるたびに、上記の行が呼び出され、同じ行列オブジェクトがリストの次の新しい要素に割り当てられます。

これをベクトル化しようとしています-可能であれば、またはループまたは適用ステートメントよりも高速にします。

これまでのところ、次の行に沿って試してみました。

indices <- seq(from = length(new.matrices) + 1, to = length(new.matrices) + reps)
new.matrices[indices] <- old.matrix

ただし、これにより次のメッセージが表示されます。

Warning message:
In new.effectors[effectorlength] <- matrix :
  number of items to replace is not a multiple of replacement length

また、次のようなold.matrixの 1 つの要素に の1 つの値を代入しようとします。new.matrices

[[1]]
[1] 8687

[[2]]
[1] 1

[[3]]
[1] 5486

[[4]]
[1] 0

目的の結果が 1 つのリスト要素 = 1 つのマトリックス全体である場合、old.matrix

ループせずにリスト要素に行列を貼り付けてベクトル化する方法はありますか? 現在実装されているループを使用すると、何千もの繰り返しを話しているため、処理が大幅に遅くなるため、可能であればこれをベクトル化したいと考えています。

4

1 に答える 1

2

おそらく、あなたはすでにあなたの問題を解決しています.とにかく、あなたのコードの問題

new.matrices[indices] <- old.matrix

一部のオブジェクト (リストNULL内の要素) を別のものに置き換えようとしたことが原因でした。したがって、ベクトルに強制し、それぞれの単一の値を別のリスト要素に貼り付けようとします (これが、この結果が得られた理由です。たとえば、が 4 または 8 で、2 x 2 行列ではない場合、 も得られます)。やっているnew.matricesmatrixRold.matrixrepsold.matrixwarning

new.matrices[indices] <- list(old.matrix)

動作し、単一の要素リストを" " 回自動的Rに複製します。list(old.matrix)reps

于 2013-04-17T13:22:06.073 に答える