2013-10-22 72 views
0

我有一個關於R循環的問題。如何做R循環

例如,目前在t = 0時,有100人活着。基本上,每個人都會以μ= 0.1的指數(-mu)的概率存活。

我想要生成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中爲我的問題做循環?

謝謝!

+0

你想保留每個迭代對象('alive2','alive3' ...)還是隻有最後一個? – juba

+0

每個迭代對象都取決於隱私對象。這意味着活着3取決於活着2.活着4取決於活躍3等等。 – NSAA

+0

是的,我明白了。我問的是如果你想在你的R會話中保留每一個'alive2'''' alive20'對象,或者只是爲了得到最後一個。 – juba

回答

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()混亂。

+0

感謝我發現這是非常有幫助! – NSAA

+0

很高興幫助!但是請勾選接受圖標,如果它解決了這個問題,這就是如何工作。 – Backlin

+0

好吧!謝謝! – NSAA

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)) 
} 
+0

我已經嘗試過,但它出來的錯誤。 – NSAA

+0

不要通過命名你的變量'alive1','alive2'等來僞造一個虛擬列表,而是使用一個真正的列表。 – Backlin

+0

錯誤:「for(2」 > { + assign( + paste0(「alive」,i), + rbinom(10,get(paste0(「alive」,(i-1)))中的意外數字常量),EXP(-mu)) +) +} 錯誤paste0( 「活着」,我):對象 '我' 未找到 > – NSAA