我在根据特定条件重复调用的函数中使用 optim ()。我想将每个 optim() 调用的结果以及正在使用的参数值存储到一个文本文件中。
以下代码给了我一个带有参数值的文本文件,但没有给出优化输出($par、$values、收敛、消息等)
我曾尝试使用 print(ans) 但 optim() 输出会覆盖文本文件中的现有数据。在 optim() 之后放置“flush.console”也没有给我任何结果。
这是我的代码的一部分:
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 值 sigma = 1
调用来自 expq2 值 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] "CONVERGENCE: REL_REDUCTION_OF_F <= FACTR*EPSMCH"
这只是对该函数的 1 次调用。最后 5 行给我带来了麻烦,要么没有输出,要么覆盖了文本文件的前 5 行。关于如何每次都将此输出附加到文本文件的任何想法?