gpt4 book ai didi

R 将多个列表元素分配给同一个对象

转载 作者:行者123 更新时间:2023-12-04 09:30:40 25 4
gpt4 key购买 nike

我目前有一个循环 - 实际上是一个循环循环,在一个模拟模型中,随着人数的增加而变慢。我已经对其中的大部分进行了矢量化,并使其速度快了很多。但是有一部分我将列表的多个元素分配为同一件事,将一个大循环简化为我想要实现的任务:

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 的一个值。到 new.matrices 的一个元素像这样:
[[1]]
[1] 8687

[[2]]
[1] 1

[[3]]
[1] 5486

[[4]]
[1] 0

当期望的结果是一个列表元素 = 一个完整的矩阵时, old.matrix 的副本

有没有办法可以在不循环的情况下矢量化在列表元素中粘贴矩阵?通过循环,它目前是如何实现的,我们正在谈论数千次重复,这会大大减慢速度,因此我希望尽可能将其矢量化。

最佳答案

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

new.matrices[indices] <- old.matrix

是因为试图用不同的东西替换一些对象( NULL 列表中的 new.matrices 元素),一个 matrix .所以 R强制 old.matrix到一个向量中并尝试将每个单个值粘贴到不同的列表元素,(这就是为什么你得到这个结果,并且当,比如, reps 是 4 或 8 并且 old.matrix 不是一个 2 x 2 矩阵,你也得到 warning )。正在做
new.matrices[indices] <- list(old.matrix)

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

关于R 将多个列表元素分配给同一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15024821/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com