сохранение выходного вектора из цикла r, который оптимизирует функцию - PullRequest
0 голосов
/ 09 мая 2018

Я написал функцию с двумя переменными, в которой я хочу оптимизировать 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 для оптимизации Z по различным значениям rho:

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.Я знаю, что подобные вопросы задавались, но все они кажутся намного проще, поскольку цикл обычно выполняется для i в 1:10, например.В этом случае у меня есть 7 конкретных значений rho, которые я обмениваю, а затем оптимизирую fr в каждом случае ... не уверен, что я просто притворяюсь, что это сложнее, или если это действительно так, но я не могу заставить его работать.

1 Ответ

0 голосов
/ 09 мая 2018

Кажется, что все, что вам нужно, это хранить значения в каждой итерации цикла

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...