Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R语言中,如何将optim()输出从多次调用的函数中写入文本文件_R_Optimization_Sink - Fatal编程技术网

在R语言中,如何将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

我在一个函数中使用optim(),该函数根据特定条件获得重复调用。我想将每个optim()调用的结果以及使用的参数值存储到一个文本文件中

下面的代码为我提供了一个包含参数值的文本文件,但没有提供optim输出($par、$value、convergence、messages等)

我尝试过使用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如果您提前打开一个文件连接并写入连接(以便它追加),而不是依赖于
sink
cat
的append参数,那么您的运气可能会更好。现在,当另一个函数打开同一个文件时,其中一个命令可能尚未写入文件(将输出保存在缓冲区中),而您在缓冲区中丢失了输出。将两者都写入打开的文件句柄可能会更好。您还可以查看
flush
函数,了解如何确保每个函数在调用另一个函数之前都已写入其输出

此外,您在函数内部有
ans
,但自动打印不会在函数内部发生,如果您想打印ans,则需要直接使用
print
函数