2016-10-04 75 views
4

一個循環內的最大值I有一個表達如何找到中的R

qbinom(0.05, n, .47) - 1 

,我想創建一個循環它迭代在n,其中n =(20200)這個表達式。對於這個循環的每一次迭代,這個函數都會產生一個數字。我想最大限度地利用它將產生的180個數字。所以,就像。

for (n in 20:200) { 
    max(qbinom(0.05, n, .47)-1) 

但我不知道如何完全做到這一點。

謝謝!

+0

@ZheyuanLi可能是最好的一個答案,而不是評論。 – zacdav

+0

不是這裏真的很重要,但更具代表性的代碼是'max(qnorm(0.05,20:200,0.47)-1)' – Chris

+0

20:200是181數字,而不是180 –

回答

6

首先,我會告訴你如何用循環做到這一點。

n <- 20:200 
MAX = -Inf ## initialize maximum 
for (i in 1:length(n)) { 
    x <- qbinom(0.05, n[i], 0.47) - 1 
    if (x > MAX) MAX <- x 
    } 

MAX 
# [1] 81 

請注意,我沒有記錄生成的所有181個值。每個值都被視爲臨時值,並在下一次迭代中被覆蓋。最後,我們只有一個值MAX

如果你想同時保留所有的記錄,我們需要首先初始化一個向量來保存它們。

n <- 20:200 
MAX = -Inf ## initialize maximum 
x <- numeric(length(n)) ## vector to hold record 
for (i in 1:length(n)) { 
    x[i] <- qbinom(0.05, n[i], 0.47) - 1 
    if (x[i] > MAX) MAX <- x[i] 
    } 

## check the first few values of `x` 
head(x) 
# [1] 5 5 6 6 6 7 

MAX 
# [1] 81 

現在我展示矢量解決方案。相關概率分佈

max(qbinom(0.05, 20:200, 0.47) - 1) 
# [1] 81 

R裏面的函數被以相同的方式矢量。對於與二項分佈相關的問題,您可以閱讀?rbinom瞭解詳細信息。

請注意,矢量化是通過回收規則實現的。例如,通過指定:

qbinom(0.05, 1:4, 0.47) 

R將第一做回收:

p: 0.05 0.05 0.05 0.05 
mean: 1  2  3  4 
    sd: 0.47 0.47 0.47 0.47 

然後通過C級環路評估

qbinom(p[i], mean[i], sd[i]) 


後續

我怎麼能知道的20:200對應於使用矢量化解決方案的最大?

我們可以使用

x <- qbinom(0.05, 20:200, 0.47) - 1 
i <- which.max(x) 
# [1] 179 

注意,i是矢量20:200位置。要獲得n你想要的,你需要:

(20:200)[i] 
# 198 

最大值爲

x[i] 
# [1] 81 
+0

謝謝!我如何能夠知道使用矢量化解決方案最大化哪個20:200? – roc11111111

+0

但在這裏我沒有qnorm,我有qbinom。也就是說,我試圖找到最大值n和相應的k,這樣在n中至多得到k的概率儘可能接近0.05。 K是表達式qbinom的輸出(0.05,n,0.47) - 1 – roc11111111

+0

如果我做max(qbinom(0.05,20:200,0.47)-1),輸出爲81.這意味着我的k是81,但有沒有一種方法可以找出20:200對應哪個n? – roc11111111