【发布时间】:2015-07-16 20:27:33
【问题描述】:
我想从 3 个向量创建一个矩阵列表,其中 sd_vec 是严格正数:
z_vec <- c(qnorm(0.90), qnorm(0.95), qnorm(0.975)) # 95% CI, 90% CI, 80% CI
me_vec <- c(0.50, 0.25, 0.10, 0.05)
sd_vec <- rnorm(n = 9, 0.8, 0.4)
sd_vec[which(sd_vec <= 0)] <- 0.1
我的问题有两个:
- 如何将循环从 1 个矩阵推广到多个矩阵?我可以逐步创建矩阵(2 级嵌套),但是当我嵌套所有 3 级时,我的索引会崩溃。
- 如何才能完全避免 for 循环(本着 this answer 的精神)?欢迎使用
sapply()等回答任何问题。
这是我尝试的一个例子:
new_n <- matrix(NA, 3,4)
for(i in seq_along(z_vec)){
for(j in seq_along(me_vec)){
new_n[i, j] <- ((z_vec[i] * sd_vec[1]) /me_vec[j])^2
}
}
new_n
# [,1] [,2] [,3] [,4]
# [1,] 2.45 9.82 61.4 245
# [2,] 4.04 16.17 101.1 404
# [3,] 5.74 22.96 143.5 574
然后我的索引失败:
new_n <- vector("list", length = length(sd_vec))
for(k in seq_along(sd_vec)){
for(i in seq_along(z_vec)){
for(j in seq_along(me_vec)){
new_n[[k]][i, j] <- ((z_vec[i] * sd_vec[k]) /me_vec[j])^2
}
}
}
带有错误消息Error in new_n[[k]][i, j] <- ((z_vec[i] * sd_vec[k])/me_vec[j])^2 : incorrect number of subscripts on matrix
感谢您对这个琐碎问题的任何和所有帮助!
【问题讨论】: