我已經在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和我不確定如何改變我做了什麼來實現我需要什麼。
我已經在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和我不確定如何改變我做了什麼來實現我需要什麼。
您可以使用一個做,直到建設:
while(TRUE){
# Do things
if(Y >= 3) break()
}
我的印象是,只有當條件結束後很滿意。所以如果我希望它在Y的值大於或等於3時停止,那麼肯定是while(Y <3)? – user3058633
我明白了。將循環更改爲do while循環。我更新了我的答案。 –
第一次,同時檢查其狀況沒有找到Y.嘗試爲Y初始化的東西小於3
Y <- 0
這不需要循環。以下使用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
如果你不知道你是多少次執行循環,而循環在這種情況下使用。它執行循環,直到滿足您所需的條件。你可以嘗試下面的代碼。
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
這與原始代碼相反,因爲在原始代碼中Y只在循環中定義,而不是在循環外部定義。 –
你可能是指'while(T <3)'? – Nishanth
從邏輯(而不是語法)的角度來看,X和Y在你的循環中永遠不會改變......因此如果Y從低於3開始,循環將永遠運行......應該基於T嗎? – ExactaBox
這裏T被定義爲這個實驗的運行次數,直到達到Y> = 3的結果。我認爲它應該是(Y <3),以便循環只在Y <3時運行,那麼我想總結它發生之前發生的次數,這會給我T的值。 – user3058633