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
有没有一种方法可以矢量化在列表元素中粘贴矩阵而不需要循环?使用循环当前如何实现它们我们正在谈论成千上万的重复,这会大大减慢事情,因此我希望尽可能地将其向量化.
也许你已经解决了你的问题,无论如何,你的代码中的问题
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”次。
| 归档时间: |
|
| 查看次数: |
1907 次 |
| 最近记录: |