Я использую optim() внутри функции, которая получает повторные вызовы в зависимости от определенного условия. Я хотел бы сохранить результаты каждого вызова optim() в текстовом файле вместе с используемыми значениями параметров.
Следующий код дает мне текстовый файл со значениями параметров, но не дает оптимального вывода ($par, $values, сходимость, сообщения и т. д.)
Я пробовал использовать print(ans), но вывод optim() перезаписывал существующие данные в текстовом файле. Установка "flush.console" после optim() также не дала мне никакого результата.
Это часть моего кода:
Q2 <- function(s,hf,cumhf) {
beta<-c(s[1],s[2],s[3])
alpha<-s[4]
sigma<-s[5]
call1<-call1+1
cat("Q2 ",call1,"\t",s[1],"\t",s[2],"\t",s[3],"\t ",hf[1,1],"\t ",cumhf[1,1],"\t",alpha,"\t",sigma,"\n",file="dump.txt",append=TRUE)
#browser()
sink(file="dump.txt",append=TRUE,type=c("output","message"))
expq2<-function(par){
alpha<-par[1]
sigma<-par[2]
cat("call from expq2 value sigma = ",sigma,"\n",file="dump.txt",append=TRUE)
sum2<-0
for(i in 1:50){
sum2<-sum2+expectationlogfrailty(i,beta,alpha,sigma)
}
return(sum2)
}
ans<-optim(c(alpha,sigma),fn=expq2,gr=NULL,method="L-BFGS-B",lower=c(-Inf,0),upper=c(Inf,Inf),control=list(maxit=250,fnscale=-1))
cat("optim function summary ",append=TRUE)
ans
est<-ans$par
s<-c(beta,est)
return(s)
}
Текстовый файл должен выглядеть примерно так:
Q2 1 -0,5675807 -0,4689595 -0,06068879 0,02349636 7,792965 0 1
вызов из expq2 value sigma = 1
вызов из expq2 value sigma = 1
.
.
.
вызов из expq2 значение sigma = 2,133043
вызов из expq2 значение sigma = 2,131043
сводка оптимальных функций
$par
1.186385e-06 2.132043e+00
$значение [1] -113,9802
Функция $counts градиент 7 7
$конвергенция [1] 0
$message [1] "КОНВЕРГЕНЦИЯ: REL_REDUCTION_OF_F ‹= FACTR*EPSMCH"
Это всего лишь 1 вызов этой функции. Последние 5 строк вызывают у меня проблемы: либо нет вывода, либо они перезаписывают 5 верхних строк текстового файла. Любые идеи о том, как я могу каждый раз добавлять этот вывод в текстовый файл?