存储来自优化函数的 R 循环的输出向量



我写了一个包含两个变量的函数,我想在其中优化 Z:

fr<-function(Z) {
delta<-pnorm((Matrix81fulld$CumZavg-sqrt(rho)*Z)/sqrt(1-rho)) - pnorm((Matrix81fulld$CumZavgLow-sqrt(rho)*Z)/sqrt(1-rho))
sum((Matrix81fulld$n*(Matrix81fulld$Prob1981 - delta)^2)/((delta*(1-delta))))
}

上述函数有效。我传递一个 rho 的值,然后求解 Z。我编写了一个循环,将 rho 的多个值传递给 fr 函数,以优化不同 rho 值的 Z:

for (rho in c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.3)){
o=optimize(fr,interval=c(-2,2))
n=nlm(fr,p=0)
}

当然,当我打印"o"时,只返回 rho=0.3 的优化值,因为所有其他值都被覆盖。我想将 o 和 n 存储在 2 个单独的向量中,这些向量包含跨 rho 值的结果。我知道有人问过类似的问题,但它们似乎都容易得多,例如,循环通常在 1:10 中为 i 运行。在这种情况下,我有 7 个特定的 rho I 值互换,然后在每种情况下优化 fr。不确定我只是假装这更复杂还是真的如此,但我似乎无法让它工作。

似乎您所需要的只是在每个循环迭代中存储值

o = list()
n = list()
i = 1
for (rho in c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.3)){
o[i]=optimize(fr,interval=c(-2,2))
n[i]=nlm(fr,p=0)
i=i+1
}

或者(回答您的评论(:

o = list()
n = list()
all_rhos = c(0.01, 0.025, 0.05, 0.1, 0.15, 0.2, 0.3)
for (i in 1:7)){
rho = all_rhos[i]
o[i]=optimize(fr,interval=c(-2,2))
n[i]=nlm(fr,p=0)
}

最新更新