2014-03-05 106 views
0

我已經在R中編寫了以下循環。我希望循環繼續運行,直到出現Y大於或等於3的情況。然後,我希望顯示T,這是實驗的次數,直到這個結果第一次發生。如何編寫一個循環,直到滿足條件爲止

T=0 
while(Y<3) 
{ 
    X=rbinom(1,5,0.5) 
    Y=rbinom(1,X,0.5) 
    Outcome=Y 
    T=T+1 
} 
T 

我很新的R和我不確定如何改變我做了什麼來實現我需要什麼。

+0

你可能是指'while(T <3)'? – Nishanth

+0

從邏輯(而不是語法)的角度來看,X和Y在你的循環中永遠不會改變......因此如果Y從低於3開始,循環將永遠運行......應該基於T嗎? – ExactaBox

+0

這裏T被定義爲這個實驗的運行次數,直到達到Y> = 3的結果。我認爲它應該是(Y <3),以便循環只在Y <3時運行,那麼我想總結它發生之前發生的次數,這會給我T的值。 – user3058633

回答

1

您可以使用一個做,直到建設:

while(TRUE){ 
    # Do things 
    if(Y >= 3) break() 
} 
+0

我的印象是,只有當條件結束後很滿意。所以如果我希望它在Y的值大於或等於3時停止,那麼肯定是while(Y <3)? – user3058633

+0

我明白了。將循環更改爲do while循環。我更新了我的答案。 –

0

第一次,同時檢查其狀況沒有找到Y.嘗試爲Y初始化的東西小於3

Y <- 0 
2

這不需要循環。以下使用R的矢量化,效率更高。

set.seed(42) #for reproducibility 
n <- 1e4 #increase n and rerun if condition is never satisfied 
X=rbinom(n,5,0.5) 
Y=rbinom(n,X,0.5) 

#has condition been satisfied? 
any(Y>3) 
#TRUE 

#first value that satisfies the condition 
which.max(Y>3) 
#[1] 141 
1

如果你不知道你是多少次執行循環,循環在這種情況下使用。它執行循環,直到滿足您所需的條件。你可以嘗試下面的代碼。

T=0 #Index variable 
Y=2 #Initial value that starts the while looping 

起初循環檢查這種初始Y = 2,如果滿足條件則該修剪開始直到條件得到不滿意。

while(Y<3) #Initialization of your looping 
{ 
    X=rbinom(1,5,0.5) 
    Y=rbinom(1,X,0.5) 
    T=T+1 
} 
T 
+0

這與原始代碼相反,因爲在原始代碼中Y只在循環中定義,而不是在循環外部定義。 –

相關問題