0

我对 R 中的循环有疑问。

例如,目前在 t=0,有 100 人活着。基本上,每个人都以指数 (-mu) 的概率活着,其中我将 mu=0.1。

我想生成 10 个样本来获取 t=1 时活着的人数。所以我已经完成并得到以下内容。

命令:

set.seed(123)
alive <- 100    
mu <- 0.1
sample <- 10
alive1 <- rbinom(sample,alive,exp(-mu)) 
alive1 

# [1] 92 88 91 87 86 95 90 87 90 91

现在,我想继续这样做,直到时间 t=20。

命令 :

alive2 <- rbinom(10,alive1,exp(-mu))
alive2
alive3 <- rbinom(10,alive2,exp(-mu))
alive3
....

alive20 <-rbinom (10,alive19,exp(-mu))
alive20

输出 :

alive2 <- rbinom(10,alive1,exp(-mu))
alive2

# [1] 78 80 81 78 81 82 83 83 83 77

alive3 <- rbinom(10,alive2,exp(-mu))
alive3

# [1] 67 71 72 63 72 73 75 75 77 72

...

但是,我不想继续重复该命令,特别是如果我想将我的时间延长到更长的时间。我如何为我的问题在 r 中循环?

谢谢!

4

2 回答 2

4
set.seed(123)
alive <- vector("list", 20)
mu <- 0.1
n <- 10

alive[[1]] <- rbinom(n, 100, exp(-mu))
for(i in 2:20)
    alive[[i]] <- rbinom(n, alive[[i-1]], exp(-mu))

我重命名了变量samplen避免与常用函数混淆sample()

于 2013-10-22T15:15:22.137 回答
0
set.seed(123)
alive <- 100    
mu <- 0.1
sample <- 10
alive1 <- rbinom(sample,alive,exp(-mu)) 


for ( i in 2:20)
{
    assign(
        paste0("alive",i),
        rbinom(10,get(paste0("alive",(i-1))),exp(-mu))
    )
}

或@Backlin 将其放入列表的建议 -

set.seed(123)
alive <- 100    
mu <- 0.1
sample <- 10
Aliveset <- vector(mode = "list", length = 20)
Aliveset[[1]] <- rbinom(sample,alive,exp(-mu)) 
for ( i in 2:20)
{
Aliveset[[i]] <- rbinom(10,Aliveset[[i-1]],exp(-mu))
}
于 2013-10-22T15:10:21.267 回答