2016-02-01 33 views
0

我期待採取以下載體上:採樣,直到滿足條件的列表

v1 = c(2, 5, 7, 9, 1) 

我想運行迭代採樣的循環,將採樣值放入 一個新的載體v2和然後休息的時候,這些值的總和此過程中大於12

這是我到目前爲止有:

v2 = c() 
while (sum(v2) > 12) { 
    sample(v1, 1, replace = FALSE) 
    if(sum(v2) > 12)) 
    break 
} 

不知道我f我正走在正確的軌道上。感謝幫助。

+2

'SS < - 樣品(V1); ss [cumsum(ss)<12]'或者類似的東西? – thelatemail

+0

你想抽樣還是不抽樣?另外,你的矢量真的很大(數千個值)?如果是這樣的話,迭代的方法可能會奏效,但如果不是的話,「thelatemail」提出的方法將起作用。但是,如果你想用替換來做一個樣本(就像你的代碼那樣),你可能需要改變它:'ss < - sample(v1,ceiling(12/min(v1),replace = T)'是確保你總是能夠獲得足夠的樣本以達到最小值 –

+0

好問題,它只是一個小矢量,所以我沒有找到替換,因此「replace = F」。我想一次抽取一個數字,直到值超過了12,在這種情況下公式停止了,我可以獲得另一個向量中的累積採樣。我的理解是,使用「False」將不會啓動任何替換,因此每個步驟都會逐步採樣 – LoF10

回答

1

我覺得你的語法有問題,利用突破更有意義有一個重複循環:

v1 = c(2, 5, 7, 9, 1); v2 <- c(); repeat { 
    v2 <- c(v2, sample(v1[!v1 %in% v2], 1)) 
    if(sum(v2) > 12) 
    break 
    }; print(v2) 

[1] 5 7 9 
+0

完全解決了這個問題,謝謝您的幫助! – LoF10

+0

@ LoF10對有用答案的預期回覆是贊成或支票。 –