[英]How to find the maximum value within a loop in R
我有表情
qbinom(0.05, n, .47) - 1
并且我想创建一个循环,它在 n = (20,200) 的 n 上迭代此表达式。 对于此循环的每次迭代,此函数将生成一个数字。 我想取它将产生的 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
然后评估
qbinom(p[i], mean[i], sd[i])
通过 C 级循环。
跟进
使用矢量化解决方案,我如何才能知道 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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.