我正在尝试创建一个R代码,将另一个循环置于我已经创建的循环中。这是我的代码:
t <- rep(1,1000)
omega <- seq(from=1,to=12,by=1)
for(i in 1:1000){
omega <- setdiff(omega,sample(1:12,1))
t[i] <- length(omega)
remove <- 0
f <- length(t [! t %in% remove]) + 1
}
当我运行这段代码时,我得到一个数字,它需要f才能达到零向量,但我想对这个实验进行10000次迭代。
答案 0 :(得分:1)
replicate
可能就是你想要运行外循环的方式。也不需要f
赋值在循环内。在这里,我将其移到了外面,并将其转换为只计算大于0的t
元素加上1。
result <- replicate(10000, {
t <- rep(1, 1000)
omega <- 1:12
for(i in seq_along(t)) {
omega <- setdiff(omega,sample(1:12,1))
t[i] <- length(omega)
}
sum(t > 0) + 1
})
我怀疑您的代码也可以通过其他方式进行简化,并且您可以在没有模拟的情况下写下您正在寻找的分发。我相信你感兴趣的变量只是你得到每个数字1:12中的至少一个,是吗?
答案 1 :(得分:1)
您是否只想将现有循环运行10,000次,如下所示?
t <- rep(1,1000)
omega <- seq(from=1,to=12,by=1)
f <- rep(NA, 10000)
for(j in 1:10000) {
for(i in 1:1000){
omega <- setdiff(omega,sample(1:12,1))
t[i] <- length(omega)
remove <- 0
f[j] <- length(t [! t %in% remove]) + 1
}
}