【问题标题】:How to find the maximum value within a loop in R如何在R中的循环中找到最大值
【发布时间】:2016-10-04 01:07:06
【问题描述】:

我有一个表情

 qbinom(0.05, n, .47) - 1 

我想创建一个循环,在 n = (20,200) 上迭代这个表达式。对于此循环的每次迭代,此函数将产生一个数字。我想取它将产生的 180 个数字中的最大值。所以,类似的东西。

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

但我不确定具体该怎么做。

谢谢!

【问题讨论】:

  • @ZheyuanLi 可能是最好的答案,而不是评论。
  • 这里并不重要,但更具代表性的代码是max(qnorm(0.05, 20:200, 0.47)-1)
  • 20:200 是 181 个数字,而不是 180

标签: r loops


【解决方案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

【讨论】:

  • 谢谢!使用矢量化解决方案,我如何能够知道最大值对应的 20:200 中的哪一个?
  • 但是这里我没有qnorm,我有qbinom。即,我试图找到最大值 n 和相应的 k,以便从 n 中得到最多 k 的概率尽可能接近 0.05。 K 是表达式 qbinom(0.05, n, 0.47) - 1 的输出
  • 如果我做 max(qbinom(0.05, 20:200, 0.47) - 1),输出是 81。这意味着我的 k 是 81,但是有什么办法可以找出哪个n 从 20:200 开始,它对应于?
猜你喜欢
  • 2021-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-03-12
  • 1970-01-01
  • 2017-09-30
  • 2022-11-25
  • 1970-01-01
  • 2018-03-06
相关资源
最近更新 更多