【发布时间】:2021-10-28 23:48:27
【问题描述】:
我有一个相同维度的矩阵列表。 在所有矩阵中,大多数值为零。
那些非零值根据矩阵在列表中的位置而变化,并且要替换的值存储在与矩阵列表长度相同的向量中。
因此,我所做的是使用 for 循环替换非零值。 然而,对 RI 来说相对较新的人已经明白这可能不是最有效的方法,特别是因为我有很多矩阵和相当多的非零概率(所有这些实际上都在某个函数中)。
背景是一个本土的马尔可夫模型,现在我想完全控制正在发生的事情(即不使用任何包),并且矩阵实际上是年龄和状态相关的转换矩阵。
所以问题是:有没有办法替换 for 循环,例如通过申请? 我已经尝试了几个小时并搜索了论坛,但似乎无法找到针对这种特定情况的解决方案。 感谢您的帮助!
最小的工作示例:
# some large matrix
m0 <- list(as.matrix(cbind(matrix(rep(0,3600), nrow=60))))
# replicate to get a list of 10 matrices of identical dimension
m <- rep(m0, 10)
# some fake data for replacement
set.seed(123)
p1 <- abs(rnorm(length(m), 0.1, 0.4))
p2 <- abs(rnorm(length(m), 0.2, 0.3))
p3 <- abs(rnorm(length(m), 0.3, 0.2))
p4 <- abs(rnorm(length(m), 0.4, 0.1))
# some replacements as example
# works with for loops, but is there a more efficient way to replace, e.g., by apply fcts?
for (i in 1:length(m)) {m[[i]][1,1] <- p1[i]}
for (i in 1:length(m)) {m[[i]][2,4] <- p2[i]}
for (i in 1:length(m)) {m[[i]][20,55] <- p3[i]}
for (i in 1:length(m)) {m[[i]][21,55] <- p4[i]}
【问题讨论】:
标签: r for-loop matrix apply markov