r - 保存数量是一个 for 循环
问题描述
将结果保存在 for 循环中时遇到问题。我正在计算一个方差(我认为这不相关),我的代码是:
library(dirmult)
n <- 50
p <- 20
size <- 5*p
prob_true <- rep(1/p, p)
multinom <- as.matrix(rmultinom(n, size, prob = prob_true))
zeros <- round(0.5*p*n)
a <- c(as.matrix(multinom))
a[sample(1:(p*n), zeros)] <- 0
data_zeros <- matrix(a, p, n)
dirmult <- dirmult(t(data_zeros))
alpha <- dirmult$gamma
sum_alpha <- (1-dirmult$theta)/dirmult$theta
for (j in ncol(data_zeros)){
A <- alpha/sum_alpha
B <- 1 - A
N <- colSums(data_zeros)
C <- 1 + sum_alpha
var_s_dirm <- list()
var_s_dirm[[j]] <- N[j]*A*B*((N[j]+sum_alpha)/C)
}
特别是我可以说 alpha 是一个有 20 个值的向量, sum_alpha 是一个标量 data_zeros 是我的数据集,它有 20 行和 50 列,N 是数据集每列的总和,所以它是一个有 50 个值的向量。
做我想做的事情似乎很简单:我想得到一个包含 50 个向量的列表,其中每个向量的不同之处在于我乘以不同的 N 值。
我真的希望有人可以帮助我找到错误。
解决方案
问题是(可能)您在每次 j 增加时都设置常量,并且在每一步中,您都使用以下行清除列表var_s_dirm <- list()
...
看看这是否适合你
library(dirmult)
n <- 50
p <- 20
size <- 5*p
prob_true <- rep(1/p, p)
multinom <- as.matrix(rmultinom(n, size, prob = prob_true))
zeros <- round(0.5*p*n)
a <- c(as.matrix(multinom))
a[sample(1:(p*n), zeros)] <- 0
data_zeros <- matrix(a, p, n)
dirmult <- dirmult(t(data_zeros))
alpha <- dirmult$gamma
sum_alpha <- (1-dirmult$theta)/dirmult$theta
A <- alpha/sum_alpha
B <- 1 - A
N <- colSums(data_zeros)
C <- 1 + sum_alpha
var_s_dirm <- list()
for (j in 1:ncol(data_zeros)){
var_s_dirm[[j]] <- N[j]*A*B*((N[j]+sum_alpha)/C)
}
输出
var_s_dirm
[[1]]
[1] 2.614833 2.327105 2.500483 3.047700 2.233528 2.130223 2.700103 2.869699 2.930213 2.575903 2.198459 2.846096
[13] 2.425448 3.517559 3.136266 2.565345 2.578267 2.763113 2.709707 3.420792
[[2]]
[1] 2.568959 2.286279 2.456615 2.994231 2.194343 2.092850 2.652732 2.819353 2.878806 2.530712 2.159889 2.796165
[13] 2.382897 3.455848 3.081244 2.520339 2.533034 2.714637 2.662168 3.360778
[[3]]
[1] 3.211199 2.857849 3.070769 3.742790 2.742930 2.616064 3.315916 3.524193 3.598509 3.163391 2.699862 3.495207
[13] 2.978622 4.319811 3.851556 3.150424 3.166294 3.393297 3.327711 4.200974
....
推荐阅读
- oracle - if 语句中的子查询 (plsql)
- python - 我如何停止 python 中的方形运动,以便它可以向相反的方向移动?
- r - 使用 dplyr 进行多变量分区
- reactjs - 在 Reactjs 中重用组件
- slack - Slack 是否支持双向加密?
- java - 比较java中的文件列表
- python - 如何使用按钮返回我的 GUI 加载到的主页,
- reactjs - 当一个子组件被标记为真的为whyDidYouRender时,whyDidYouRender npm包使应用程序崩溃
- javascript - 如何将 CSP 与 pdf.js 一起使用?我对工人有意见
- http - Liveness 和 Readiness 探针连接被拒绝