在R语言中,如何将optim()输出从多次调用的函数中写入文本文件
我在一个函数中使用optim(),该函数根据特定条件获得重复调用。我想将每个optim()调用的结果以及使用的参数值存储到一个文本文件中 下面的代码为我提供了一个包含参数值的文本文件,但没有提供optim输出($par、$value、convergence、messages等) 我尝试过使用print(ans),但optim()输出会覆盖文本文件中的现有数据。将“flush.console”放在optim()之后也没有给出任何结果 这是我代码的一部分:在R语言中,如何将optim()输出从多次调用的函数中写入文本文件,r,optimization,sink,R,Optimization,Sink,我在一个函数中使用optim(),该函数根据特定条件获得重复调用。我想将每个optim()调用的结果以及使用的参数值存储到一个文本文件中 下面的代码为我提供了一个包含参数值的文本文件,但没有提供optim输出($par、$value、convergence、messages等) 我尝试过使用print(ans),但optim()输出会覆盖文本文件中的现有数据。将“flush.console”放在optim()之后也没有给出任何结果 这是我代码的一部分: Q2 <- function(s,h
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如果您提前打开一个文件连接并写入连接(以便它追加),而不是依赖于sink
和cat
的append参数,那么您的运气可能会更好。现在,当另一个函数打开同一个文件时,其中一个命令可能尚未写入文件(将输出保存在缓冲区中),而您在缓冲区中丢失了输出。将两者都写入打开的文件句柄可能会更好。您还可以查看flush
函数,了解如何确保每个函数在调用另一个函数之前都已写入其输出
此外,您在函数内部有ans
,但自动打印不会在函数内部发生,如果您想打印ans,则需要直接使用print
函数