如何在R中找到循环内的最大值

roc*_*111 4 loops r

我有一个表达

 qbinom(0.05, n, .47) - 1 
Run Code Online (Sandbox Code Playgroud)

我想创建一个循环,它在n上为n =(20,200)迭代这个表达式.对于此循环的每次迭代,此函数将生成一个数字.我想取其将产生的180个数字的最大值.所以,像.

 for (n in 20:200) {
   max(qbinom(0.05, n, .47)-1)
Run Code Online (Sandbox Code Playgroud)

但我不确定如何做到这一点.

谢谢!

李哲源*_*李哲源 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
Run Code Online (Sandbox Code Playgroud)

注意,我没有记录生成的所有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
Run Code Online (Sandbox Code Playgroud)

现在我正在展示矢量化解决方案.

max(qbinom(0.05, 20:200, 0.47) - 1)
# [1] 81
Run Code Online (Sandbox Code Playgroud)

与概率分布相关的R函数以相同的方式矢量化.对于与二项分布相关的那些,您可以阅读?rbinom详细信息.

注意,矢量化是通过回收规则实现的.例如,通过指定:

qbinom(0.05, 1:4, 0.47)
Run Code Online (Sandbox Code Playgroud)

R将首先进行回收:

   p: 0.05    0.05    0.05    0.05
mean:    1       2       3       4
  sd: 0.47    0.47    0.47    0.47
Run Code Online (Sandbox Code Playgroud)

然后评估

qbinom(p[i], mean[i], sd[i])
Run Code Online (Sandbox Code Playgroud)

通过C级循环.


跟进

如何使用矢量化解决方案知道20:200中的哪一个对应于最大值?

我们可以用

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

注意,i是向量中的位置20:200.为了得到n你想要的,你需要:

(20:200)[i]
# 198
Run Code Online (Sandbox Code Playgroud)

最大值是

x[i]
# [1] 81
Run Code Online (Sandbox Code Playgroud)