首先,我将向您展示如何使用循环来完成此操作。
n <- 20:200
MAX = -Inf
for (i in 1:length(n)) {
x <- qbinom(0.05, n[i], 0.47) - 1
if (x > MAX) MAX <- x
}
MAX
注意,我不会记录生成的所有181个值。每个值都被视为临时值,并将在下一次迭代中被覆盖。最终,我们只有一个单一的值
MAX
。
如果您想同时保留所有记录,我们需要先初始化一个向量来保存它们。
n <- 20:200
MAX = -Inf
x <- numeric(length(n))
for (i in 1:length(n)) {
x[i] <- qbinom(0.05, n[i], 0.47) - 1
if (x[i] > MAX) MAX <- x[i]
}
head(x)
MAX
现在我将展示矢量化的解决方案。
max(qbinom(0.05, 20:200, 0.47) - 1)
与概率分布相关的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]
最大值
x[i]
max(qnorm(0.05, 20:200, 0.47)-1)
。 - Chris