R为同一个对象分配几个列表元素

War*_*250 5 for-loop r list matrix vectorization

我目前有一个循环 - 实际上是一个循环循环,在一个模拟模型中,随着个人数量的增加而变慢.我已将其中的大部分内容融入其中,并使其变得更快.但是有一部分我将列表的多个元素分配为同一个东西,将一个大循环简化为我想要实现的任务:

new.matrices[[length(new.matrices)+1]]<-old.matrix
Run Code Online (Sandbox Code Playgroud)

对于循环的每次迭代,调用上面的行,并将相同的矩阵对象分配给列表的下一个新元素.

我试图对此进行矢量化 - 如果可能的话,或者使它比循环或apply语句更快.

到目前为止,我已尝试过以下方面的内容:

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

但是这导致了以下消息:

Warning message:
In new.effectors[effectorlength] <- matrix :
  number of items to replace is not a multiple of replacement length
Run Code Online (Sandbox Code Playgroud)

它还尝试将一个值分配给一个像这样的old.matrix元素new.matrices:

[[1]]
[1] 8687

[[2]]
[1] 1

[[3]]
[1] 5486

[[4]]
[1] 0
Run Code Online (Sandbox Code Playgroud)

当所需的结果是一个列表元素=一个整个矩阵,一个副本 old.matrix

有没有一种方法可以矢量化在列表元素中粘贴矩阵而不需要循环?使用循环当前如何实现它们我们正在谈论成千上万的重复,这会大大减慢事情,因此我希望尽可能地将其向量化.

Mic*_*ele 2

也许你已经解决了你的问题,无论如何,你的代码中的问题

new.matrices[indices] <- old.matrix
Run Code Online (Sandbox Code Playgroud)

是由于尝试用不同的对象(a )替换某些对象(列表NULL中的元素)引起的。因此,强制转换为向量并尝试将每个单个值粘贴到不同的列表元素(这就是为什么你得到这个结果,当是 4 或 8 并且不是 2 x 2 矩阵时,你也会得到)。正在做new.matricesmatrixRold.matrixrepsold.matrixwarning

new.matrices[indices] <- list(old.matrix)
Run Code Online (Sandbox Code Playgroud)

将会工作,并且R会自动复制单个元素列表list(old.matrix)reps”次。