[英]Store results within a for loop in r
我正在尝试创建一个包含 4 个不同维度的数据集的列表,并将这些结果存储在 data_m 中,以便拥有例如维度为 50x20、100x20 之一的数据集,依此类推......但每次我运行代码时我知道数据被重写了,我得到了 4 个数据集,它们都相等,并且尺寸等于两个 for 循环的最后一个尺寸......
希望有人可以帮助我提前谢谢
这是代码:
multinom <- list()
multinom_z <- list()
var_m <- list()
var_mzeros <- list()
data_m <- list()
data_mzeros <- list()
for (i in 1:4){
for (p in c(20, 50)){
for (n in c(50, 100)){
set.seed(123)
prob <- rep(1/p, p)
multinom[[i]] <- t(rmultinom(n, p, prob = prob))
zeros <- matrix(0, n, 85*p/100)
multinom_z[[i]] <- cbind(multinom[[i]], zeros)
data_m[[i]] <- data.frame(multinom[[i]])
}
}
}
如果您将print(i)
添加到内部循环,您会看到运行了 16 个循环,而不是您期望的 4 个循环。 该代码正在生成四个不同的data.frame
,但是第四个data.frame
被保存为i
的每个值的最后一次迭代。
这将删除i
循环并按名称将data.frame
保存到list
中
multinom <- list()
multinom_z <- list()
var_m <- list()
var_mzeros <- list()
data_m <- list()
data_mzeros <- list()
set.seed(123)
for (p in c(20, 50)){
for (n in c(50, 100)){
prob <- rep(1/p, p)
multinom<- t(rmultinom(n, p, prob = prob))
zeros <- matrix(0, n, 85*p/100)
multinom_z <- cbind(multinom, zeros)
data_m[[sprintf('d%ix%i', p, n)]] <- data.frame(multinom)
}
}
显示 output 名称和尺寸
> lapply(data_m, dim)
$d20x50
[1] 50 20
$d20x100
[1] 100 20
$d50x50
[1] 50 50
$d50x100
[1] 100 50
如果更喜欢按索引保留列表而不使用名称,则可以在循环中使用以下内容
data_m[[length(data_m) + 1]] <- data.frame(multinom)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.