一個循環內的最大值I有一個表達如何找到中的R
qbinom(0.05, n, .47) - 1
,我想創建一個循環它迭代在n,其中n =(20200)這個表達式。對於這個循環的每一次迭代,這個函數都會產生一個數字。我想最大限度地利用它將產生的180個數字。所以,就像。
for (n in 20:200) {
max(qbinom(0.05, n, .47)-1)
但我不知道如何完全做到這一點。
謝謝!
一個循環內的最大值I有一個表達如何找到中的R
qbinom(0.05, n, .47) - 1
,我想創建一個循環它迭代在n,其中n =(20200)這個表達式。對於這個循環的每一次迭代,這個函數都會產生一個數字。我想最大限度地利用它將產生的180個數字。所以,就像。
for (n in 20:200) {
max(qbinom(0.05, n, .47)-1)
但我不知道如何完全做到這一點。
謝謝!
首先,我會告訴你如何用循環做到這一點。
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
謝謝!我如何能夠知道使用矢量化解決方案最大化哪個20:200? – roc11111111
但在這裏我沒有qnorm,我有qbinom。也就是說,我試圖找到最大值n和相應的k,這樣在n中至多得到k的概率儘可能接近0.05。 K是表達式qbinom的輸出(0.05,n,0.47) - 1 – roc11111111
如果我做max(qbinom(0.05,20:200,0.47)-1),輸出爲81.這意味着我的k是81,但有沒有一種方法可以找出20:200對應哪個n? – roc11111111
@ZheyuanLi可能是最好的一個答案,而不是評論。 – zacdav
不是這裏真的很重要,但更具代表性的代碼是'max(qnorm(0.05,20:200,0.47)-1)' – Chris
20:200是181數字,而不是180 –