【发布时间】:2014-04-17 02:14:57
【问题描述】:
我在根据特定条件重复调用的函数中使用 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)
}
文本文件应如下所示:
第二季度 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
$消息 [1]“收敛:REL_REDUCTION_OF_F
这只是对该函数的 1 次调用。最后 5 行给我带来了麻烦,要么没有输出,要么覆盖了文本文件的前 5 行。关于如何每次都将此输出附加到文本文件的任何想法?
【问题讨论】:
标签: r optimization sink